Pour pratiquer mes compétences Java, j'ai développé un jeu de base sur les serpents. Avec Java, j'utilise LibGDX et Scene2d pour gérer tous mes objets.Scène 2D Séparation des coordonnées du point de vue et des coordonnées du jeu
À l'heure actuelle, les limites du jeu de serpent sont définies pour les dimensions de la fenêtre. Les collisions sont vérifiées chaque fois que le serpent atteint l'extérieur de la fenêtre. J'utilise une fenêtre d'affichage qui est incorporée dans la scène comme indiqué ci-dessous.
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();
}
code de contrôle de collision:
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();
}
}
}
}
Le gros problème est que les mécanismes de jeu sont grandement affectées par la taille de l'écran. Ce que JE VEUX avoir, c'est une zone virtuelle dans laquelle le serpent se déplace (presque comme son propre système de coordonnées) qui est séparée de la fenêtre. En ce qui concerne la fenêtre d'affichage, je préférerais qu'il reste une fenêtre d'affichage si possible. Quelle serait la meilleure façon de faire cela?
Merci! J'ai suivi votre conseil et suis allé avec la fenêtre d'ajustement –