有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java冲突问题

我在检查屏幕上绘制的对象的冲突时遇到问题。例如:我目前正在制作一个蛇游戏,我必须让它检查蛇是否击中了某个方块对象(这会使蛇增加,并在蛇击中/吃掉方块时增加分数)。因此,我创建了一个函数来检查snake和block对象之间的碰撞,但它不能正常工作(当从右上方移动snake到对象上方时,它可以正常工作,但在其他情况下它不能正常工作):

public boolean checkColision() {
    if(SnakeObjs.get(0).x >= obj.x && SnakeObjs.get(0).x
                <= obj.x+10 && SnakeObjs.get(0).y
                >= obj.y && SnakeObjs.get(0).y <= obj.y+10) {
        return true;
    }else{
        return false;
    }
}

此函数用于检查碰撞。其中SnakeObjs.get(0)包含需要碰撞块对象的snake对象的x和y选择器,obj包含要检查碰撞的块对象的x和y坐标

绘制块对象和蛇对象的绘制方法如下所示:

public void paint(Graphics g) {
    for(int i=0;i<SnakeObjs.size();i++) {
        g.setColor(new Color(
                        (int)((double)Math.random()*200.0),
                        (int)((double)Math.random()*200.0),
                        (int)((double)Math.random()*200.0)));
        g.fillRect(SnakeObjs.get(i).x, SnakeObjs.get(i).y, 10, 10);
        g.setColor(Color.WHITE);
        g.drawRect(SnakeObjs.get(i).x-1, SnakeObjs.get(i).y-1, 12, 12);
    }
    g.setColor(new Color(
                    (int)((double)Math.random()*200.0),
                    (int)((double)Math.random()*200.0),
                    (int)((double)Math.random()*200.0)));
    g.fillRect(obj.x, obj.y, 10, 10);
    g.setColor(Color.BLACK);
    g.drawString("Score: "+score, 10, 10);
}

如果有人能帮我解决这个碰撞问题,那就太好了

提前感谢,

致以最良好的祝愿, 斯凯夫


共 (1) 个答案

  1. # 1 楼答案

    错误在于将一个对象解释为矩形,而将另一个对象解释为点。检查点是否在矩形中,而不是两个矩形是否相交。它是从右边和上面工作的

    我建议为蛇和对象保存一个矩形。Ad方法getBounds()。然后可以使用“矩形”中的intersect()方法。也可以将此边界用于绘制操作