我现在正在12年级,我正在为计算机科学课打造Pacman游戏。
到目前为止我所拥有的是一个名为Play.java
的文件来运行实际的游戏。我有一个init
方法来初始化精灵表,图像和动画。然后我有一个render
方法在屏幕上绘制迷宫和吃豆人。最后,我有一个update
方法,几乎可以更新屏幕上的内容。
这就是update
函数中的内容:
public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
pacman.update(delta);
Input input = gc.getInput();
Color walls;
if(input.isKeyDown(Input.KEY_UP)) {
walls = maze.getColor((int) pacmanPosX, (int) pacmanPosY - 2);
if (walls.getRed() == 0 && walls.getGreen() == 0 && walls.getBlue() == 0) {
pacman = pacmanAnimation[2];
pacmanPosY -= delta * .1f;
}
} else if(input.isKeyDown(Input.KEY_DOWN)) {
walls = maze.getColor((int) pacmanPosX, (int) pacmanPosY + 20);
if (walls.getRed() == 0 && walls.getGreen() == 0 && walls.getBlue() == 0) {
pacman = pacmanAnimation[3];
pacmanPosY += delta * .1f;
}
} else if(input.isKeyDown(Input.KEY_LEFT)) {
walls = maze.getColor((int) pacmanPosX - 2, (int) pacmanPosY);
if (walls.getRed() == 0 && walls.getGreen() == 0 && walls.getBlue() == 0) {
pacman = pacmanAnimation[0];
pacmanPosX -= delta * .1f;
}
} else if(input.isKeyDown(Input.KEY_RIGHT)) {
walls = maze.getColor((int) pacmanPosX + 20, (int) pacmanPosY);
if (walls.getRed() == 0 && walls.getGreen() == 0 && walls.getBlue() == 0) {
pacman = pacmanAnimation[1];
pacmanPosX += delta * .1f;
}
}
}
所以基本上我允许用户在屏幕上移动Pacman并检查Pacman可能降落的未来位置的像素颜色。如果未来的位置不是黑色,那么Pacman可能不会继续向这个方向发展。这个概念在很大程度上起作用,除非Pacman可以在左上角/右上角开始穿过矩形。
这是我正在谈论的图像:
我把Pacman能够移动的区域用红色圈起来,但不应该。
如何解决此问题?我不希望吃豆子在任何蓝色矩形的顶部。如果您希望我添加更多代码,我可以,但我认为update
方法现在已经足够了。只是想创建一个MCVE。
此外,我正在使用Slick2D和LWJGL进行此游戏。