首页 > 解决方案 > 未正确检测颜色 Java

问题描述

我现在在 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。

标签: java

解决方案


推荐阅读