我在检查屏幕上绘制的对象的切割时遇到问题。例如:我正在制作一个蛇游戏,我必须检查蛇是否击中某个阻挡物体(这会使蛇增加,并在蛇击中/'吃'阻挡时增加分数)。所以我做了一个函数来检查蛇和块对象之间的碰撞,但是它不能正常工作(当从上方用蛇移动物体时,它确实有效,但是否则没有):
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)
包含需要击中块对象的蛇对象的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);
}
如果有人能帮助我解决这个碰撞问题,那就太好了。
提前致谢,
最诚挚的问候, Skyfe。
答案 0 :(得分:0)
错误在于您将一个对象解释为矩形而将另一个对象解释为点。检查点是否在矩形中,而不是两个矩形是否相交。它从正确和从顶部起作用。
我建议为蛇和物体保存一个矩形。使用方法getBounds()。那么你可以使用Rectangle中的intersect()方法。您也可以使用此边界进行绘制操作。