Как добавить столкновение к изображению / спрайту в Slick2D? - PullRequest
0 голосов
/ 06 июня 2018

Я работаю над Pac-man игрой для своего 12 класса по информатике.

Это код, который у меня пока есть:

Player.java:

package javagame;

import org.lwjgl.input.Mouse;
import org.newdawn.slick.*;
import org.newdawn.slick.state.*;

//extends BasicGameState creates a basic computer screen
public class Play extends BasicGameState {
    float pacmanPosX = 218;
    float pacmanPosY = 400;

    Image maze;

    //private SpriteSheet pacMovingLeft;
    private SpriteSheet[] pacmanSprite = new SpriteSheet[4];
    private Animation[] pacmanAnimation = new Animation[4];

    private Animation pacman;

    private int score = 0;

    public Play(int state) {

    }

    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
        maze = new Image("res/Game/Maze.png");

        pacmanSprite[0] = new SpriteSheet("res/Characters/Left-Direction.png", 19, 20);
        pacmanAnimation[0] = new Animation(pacmanSprite[0], 150);

        pacmanSprite[1] = new SpriteSheet("res/Characters/Right-Direction.png", 19, 20);
        pacmanAnimation[1] = new Animation(pacmanSprite[1], 150);

        pacmanSprite[2] = new SpriteSheet("res/Characters/Up-Direction.png", 19, 20);
        pacmanAnimation[2] = new Animation(pacmanSprite[2], 150);

        pacmanSprite[3] = new SpriteSheet("res/Characters/Down-Direction.png", 19, 20);
        pacmanAnimation[3] = new Animation(pacmanSprite[3], 150);

        pacman = pacmanAnimation[0];
    }

    // This is the method that draws stuff on the screen
    public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
        g.drawString("HIGH SCORE: ", 0, 0);
        g.drawString("SCORE: ", 356, 0);

        maze.draw(5, 35);
        pacman.draw(pacmanPosX, pacmanPosY);
    }

    // Updating the images on the screen
    public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
        pacman.update(delta);

        Input input = gc.getInput();

        if(input.isKeyDown(Input.KEY_UP)) {
            pacman = pacmanAnimation[2];
            pacmanPosY -= delta * .1f;
        } else if(input.isKeyDown(Input.KEY_DOWN)) {
            pacman = pacmanAnimation[3];
            pacmanPosY += delta * .1f;
        } else if(input.isKeyDown(Input.KEY_LEFT)) {
            pacman = pacmanAnimation[0];
            pacmanPosX -= delta * .1f;
        } else if(input.isKeyDown(Input.KEY_RIGHT)) {
            pacman = pacmanAnimation[1];
            pacmanPosX += delta * .1f;
        }
    }

    public int getID() {
        return 1;
    }
}

У меня есть файл Menu.java, который переводит вас в состояние воспроизведения,но этот код не имеет отношения к моему вопросу.

Как мне добавить столкновение к maze?Я помню, в 11 классе я работал над игрой, используя Phaser, и я смог использовать такие методы / функции, как physics и collideWorldBounds для моих изображений.Это позволило объектам отражаться от изображений / спрайтов, которые имели эти методы.Мне нужно добавить физику в лабиринт, чтобы Pac-man не мог пройти через лабиринт.

1 Ответ

0 голосов
/ 08 июня 2018

Я бы НЕ рекомендовал для этого сима физики.Это было бы слишком сложно.Когда я клонировал pacman, я делал то, что когда пользователь изменял направление pacman, он сохранялся в переменной временного направления.Когда pacman может идти в направлении временного направления, тогда временное направление становится фактическим направлением.Проверка, может ли pacman идти в каком-либо направлении, - это простой поиск по сетке.

...