当前位置: 首页 > 知识库问答 >
问题:

迷宫2D java游戏中的碰撞检测

曹涵润
2023-03-14

我正在尝试制作我的第一个Pacman游戏,但我遇到了一堵我自己似乎无法打破的墙:(

这是关于如何在我的游戏中检测碰撞,所以步行者不能穿过障碍物/墙壁。我已经使它不能去屏幕外与此代码:

    if (pacman_x < 27) {
        pacman_velX = 0;
        pacman_x = 27;
    }
    if (pacman_y < 27) {
        pacman_velY = 0;
        pacman_y = 27;
    }
    if (pacman_x > 621) {
        pacman_velX = 0;
        pacman_x = 621;
    }
    if (pacman_y > 513) {
        pacman_velY = 0;
        pacman_y = 513;
    }

,但如果我在屏幕中间的电路板上有一个矩形,我不知道如何编程,这样它就会在墙前停止。

我需要阻止我的pacman移动到竞技场内的墙上,如你所见(左上方的矩形)

我的Board类代码:

public class Board extends JPanel implements ActionListener, KeyListener {

private Timer timer;
private Map m;
private Pacman p;
int pacman_x = 27, pacman_y = 27, pacman_velX = 0, pacman_velY = 0; 

public Board() 
{
    m = new Map();
    p = new Pacman();
    timer = new Timer(10, this);
    timer.start();
    addKeyListener(this);
    setFocusable(true);
    setFocusTraversalKeysEnabled(false); // So we can't use shift 
}

public void actionPerformed(ActionEvent e) {
    pacman_x = pacman_x + pacman_velX;
    pacman_y = pacman_y + pacman_velY;
    repaint();          

    if (pacman_x < 27) {
        pacman_velX = 0;
        pacman_x = 27;
    }
    if (pacman_y < 27) {
        pacman_velY = 0;
        pacman_y = 27;
    }
    if (pacman_x > 621) {
        pacman_velX = 0;
        pacman_x = 621;
    }
    if (pacman_y > 513) {
        pacman_velY = 0;
        pacman_y = 513;
    }

    if (pacman_x >= 150 && pacman_y >= 27) {
        pacman_velX = 0;
        pacman_x = 27;
    }

}

public void paint(Graphics g) {
    super.paint(g);

    Graphics2D g2d = (Graphics2D) g;

    for(int y = 0; y < 21; y++) {
        for (int x = 0; x < 25; x++) {
            if (m.getMap(x, y).equals("b")) {
                g.drawImage(m.getBarrier(), x * 27, y * 27, null);
            }
            if (m.getMap(x, y).equals("s")) {
                g.drawImage(m.getSpace(), x * 27, y * 27, null);
            }
        }

    }

    // Place pacman on board        
    g.drawImage(p.getPacman(), pacman_x , pacman_y, null);  

    // Create Rectangles barriers
    Rectangle r1 = new Rectangle(150, 27, 27, 27);

    g2d.setColor(new Color(63, 72, 204, 250));      
    g.fillRect(r1.x, r1.y, 27, 27);

    // Sets Color on lives
    int lives = 3;
    g2d.setColor(new Color(255, 0, 0, 250));
    g2d.drawString("Lives left: " + lives, 20, 20);

    // Sets Color on Scoreboard text
    int point = 0;      
    g2d.setColor(new Color(255, 0, 0, 250));
    g2d.drawString("Score: " + point, 20, 550);
}

@Override
public void keyPressed(KeyEvent e) {

    int pacman_direction = e.getKeyCode();

    if (pacman_direction == KeyEvent.VK_LEFT) {

        pacman_velX = -3;
        pacman_velY = 0;

    }       

    if (pacman_direction == KeyEvent.VK_UP) {

        pacman_velX = 0;
        pacman_velY = -3;           

    }

    if (pacman_direction == KeyEvent.VK_RIGHT) {

        pacman_velX = 3;
        pacman_velY = 0;

    }

    if (pacman_direction == KeyEvent.VK_DOWN) {

        pacman_velX = 0;
        pacman_velY = 3;    

    }

}

希望有人能告诉我该怎么做...似乎找不到一个简单的例子教程在互联网上,解释我想让它做的事情!

共有1个答案

乐寒
2023-03-14

这并不完全是关于在java中制作pac man,而是关于一个2d平台,它在2d空间中具有所有碰撞映射,以及如何创建和添加对象,例如包含动画的玩家和敌人,您应该会发现它总体上很有用:https://www.youtube.com/watch?v=9dzhgsVaiSo

注意:你需要自己处理鬼的AI:D

免责声明我没有制作这些视频,我只是发现它们非常有用。

 类似资料:
  • 如何让我的球从屏幕上的物体上反弹? 下图是一个很好的例子,说明一旦球碰到障碍物,程序应该如何工作。 我让球从墙上反弹,但剩下的是让它也从物体上反弹。谢谢你的帮助! 以下是源代码:

  • 有人能帮我在我的精灵中添加碰撞点吗?我过去有一个代码,我在图像上分层位图,但是同样的代码不能很好地集成到物理画线上,而不是检测图像上的黑/灰位置。 如果有人能帮助我或为我指出正确的方向,我会很高兴。

  • 我正在使用html5画布和javascript开发一个迷宫游戏(我更喜欢使用jquery库进行编码)这个游戏是为移动设备而设计的,我对使用触摸事件是完全陌生的 在画布上,我添加了迷宫图像-黑白gif迷宫。 我将使用trouch在迷宫中导航。 以下是我所做的: > 为触摸添加事件侦听器: window.add事件监听器(触摸移动,句柄移动,假); 添加了处理移动的功能: 函数handleMove(e

  • 我正在做一个2d平板游戏。到目前为止,我已经做了一些事情。我正在使用libgdx的矩形进行基本的碰撞检测,所以考虑到我现在只有草块,我用Java制作了一个单块世界(文件读取器还没有准备好),问题是我的检测只在第一次工作,换句话说,如果我产生碰撞到一个块,它会检测到碰撞并这样做。虽然如果我在没有碰撞的情况下,让我的球员在方块顶部出现,球员将永远摔倒。 这是代码=

  • 问题内容: 我正在尝试制作一个Python游戏,其中红龟追逐蓝龟。当红色乌龟抓到蓝色乌龟时,我希望它在屏幕上说“碰撞”,但它不起作用。当它碰撞时,什么也没有发生,并且给我一个错误“ Turtle”对象不可调用”。 问题答案: 与实际编程相比,这段代码似乎更让人想不到: 乌龟没有方法。您不能使用此语句简单地将方法添加到现有类。没有和功能。每次运动后,如果需要,该碰撞测试将只执行一次。让我们尝试挽救我

  • 本文向大家介绍C++实现走迷宫小游戏,包括了C++实现走迷宫小游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++实现走迷宫小游戏的具体代码,供大家参考,具体内容如下 源码下载:C++实现走迷宫小游戏 主程序代码: 更多C++精彩小游戏请点击专题:经典游戏 进行学习 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。