【发布时间】:2015-05-20 03:12:31
【问题描述】:
我正在用 Java 制作游戏。并且玩家和敌人之间的碰撞无法正常工作。
我想要的是:当它们发生碰撞时,游戏结束了,我们需要进入游戏结束面板。 相反,它做了什么:敌人从玩家身上碾过,游戏继续进行。
我复制粘贴了一段代码,我真的希望有人能找出我做错了什么。
有关更多信息,玩家和敌人可以互相射击,并且碰撞有效。还有随机放置的障碍物,玩家和敌人都可以检测到。
当玩家与敌人发生碰撞时该怎么办:
for(Enemy enemy: enemies){
if (checkCollision(player, enemy)){
player.dead = true;
}
}
我在action执行函数中更新播放器:
if (!player.dead)
player.redraw();
else
{
spelTimer.stop();
mainVenster.switchPanel(new GameOverPanel(mainVenster));}
函数 checkCollision(如果有帮助,请注明):
public boolean checkCollision(tanks.Game_Object object1, tanks.Game_Object object2){
double dx = object1.x_pos - object2.x_pos;
double dy = object1.y_pos - object2.y_pos;
double distance = (dx*dx) + (dy*dy);
double minDistance = (object1.r+object2.r);
return (distance < minDistance*minDistance);
}
编辑:x_pos 和 y_pos 是我的对象的中心坐标,r 是半径。
【问题讨论】:
-
您的帧速率可能不够高,即使子弹 看起来 与播放器相交,程序也只能看到前一帧和后一帧。您可能想尝试将阈值 minDistance 增加到两倍大,看看情况如何。
-
你是如何更新坐标的?
-
@bcr 我将尝试看看它提供了什么。不过我必须说,当我(玩家)向敌人或障碍物射击(并且我击中它们)时,它们会被移除。
-
@haifzhan 我设置了一个公共计时器计时器,延迟为 50 毫秒。我希望这是你想知道的?
标签: java