Чтобы практиковать свои навыки Java, я разрабатывал базовую игру Snake. С помощью java я использую LibGDX и Scene2d для обработки всех моих объектов.Сцена 2D Разделение с координатами и координатами игры
Прямо сейчас, границы игры змеи устанавливаются в размеры видового экрана. Столкновения проверяются всякий раз, когда змея достигает внешней части окна просмотра. Я использую окно просмотра экрана, которое включено в Сцена, как показано ниже.
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();
}
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();
}
}
}
}
Большая проблема состоит в том, что игровая механика сильно зависит от размера экрана. Я хочу иметь виртуальную область, в которой змея перемещается (почти как собственная система координат), которая отделена от области просмотра. Что касается области просмотра, я предпочел бы, чтобы она оставалась экраном просмотра, если это возможно. Какой был бы лучший способ сделать это?
Спасибо! Я принял ваш совет и пошел с подходящим видовым экраном –