[英]Scene 2D Separation from viewport coordinates and game coordinates
為了練習Java技能,我一直在開發基本的Snake游戲。 使用Java,我正在使用LibGDX和Scene2d處理所有對象。
現在,將蛇游戲的邊界設置為視口尺寸。 每當蛇到達視口外部時,都會檢查碰撞。 我正在使用一個合並到舞台中的屏幕視口,如下所示。
private AudioSnake gameCore;
private Stage gameStage;
private Image background;
private Image snakeTip;
private Image food;
private ArrayList<Image> snakeTail = new ArrayList <Image>(); // all the snake tail bits
private ScreenViewport viewport;
public GameScreen(AudioSnake audioSnake) {
gameCore = audioSnake;
viewport = new ScreenViewport();
gameStage = new Stage(viewport);
Gdx.input.setInputProcessor(gameStage);
uiSkin = new Skin(Gdx.files.internal("Ui/uiskin.json"));
scoreLabel = new Label(String.format("%.0f",score),uiSkin);
generateUi();
generateFood();
}
碰撞檢查代碼:
public void collisionCheck(){ // method that checks rather the snake head is touching outside the border, or inside it's own body
if(snakeTip.getX() >= gameStage.getWidth() || snakeTip.getY() >= gameStage.getHeight() || snakeTip.getX() <= 0 || snakeTip.getY() <= 0){
System.out.println("death activated");
activateDeath();
}
else{
for(int i = 0; i < snakeTail.size(); i++){
if(snakeTip.getX() == snakeTail.get(i).getX() && snakeTip.getY() == snakeTail.get(i).getY()){
System.out.println("death activated");
activateDeath();
}
}
}
}
最大的問題是游戲機制受屏幕尺寸的影響很大。 我想擁有的是蛇在其中移動的虛擬區域(幾乎像它自己的坐標系一樣),與視口分開。 至於視口,我希望它盡可能保持屏幕視口。 最好的方法是什么?
ScreenViewport在這里不是很好,因為例如,您的游戲在smaprtphone的屏幕上會很好看,而在平板電腦屏幕的中心會是一個小多邊形。 您應該考慮使用FitViewport ,它會在屏幕上添加一個條形,但可以使每個設備保持相同的舞台大小。
要定義您的虛擬屏幕應該在視口的構造函數中通過的分辨率
private FitViewport viewport;
public GameScreen(AudioSnake audioSnake) {
gameCore = audioSnake;
viewport = new ScreenViewport(SCREEN_WIDTH_IN_PX, SCREEN_HEIGHT_IN_PX);
gameStage = new Stage(viewport);
那么您還需要覆蓋resize()
方法以使視口可更新
@Override
public void resize(int width, int height) {
viewport.update(width, height);
}
同樣在render()
方法中,您需要在渲染舞台之前立即應用視口
viewport.apply();
stage.act(delta);
stage.draw();
完成所有這些操作之后,您可以僅使用自定義的SCREEN_WIDTH_IN_PX
而不是gameStage.getWidth()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.