Um meine Java-Kenntnisse zu üben, habe ich ein einfaches Snake-Spiel entwickelt. Mit Java verwende ich LibGDX und Scene2d, um alle meine Objekte zu behandeln.Szene 2D Trennung von Ansichtsfensterkoordinaten und Spielkoordinaten
Im Moment sind die Grenzen des Snake-Spiels auf die Ansichtsfenster-Dimensionen festgelegt. Kollisionen werden überprüft, wenn die Schlange die Außenseite des Ansichtsfensters erreicht. Ich verwende ein Bildschirm-Ansichtsfenster, das wie unten dargestellt in die Bühne integriert ist.
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();
}
Kollisionsprüfung Code:
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();
}
}
}
}
Das große Problem dabei ist, dass die Spielmechanik stark von der Größe des Bildschirms betroffen ist. Was ich möchte, ist ein virtueller Bereich, in dem sich die Schlange bewegt (fast wie ihr eigenes Koordinatensystem), der vom Ansichtsfenster getrennt ist. Was das Viewport betrifft, würde ich lieber ein Bildschirm-Viewport bleiben, wenn möglich. Was wäre der beste Weg, dies zu tun?
Dank nutzen! Ich nahm deinen Rat und ging mit dem angepassten Ansichtsfenster –