我正在制作一款空气曲棍球游戏,用户可以使用鼠标控制木槌,并且计算机可以控制另一个木槌。我想要处理冰球和木槌之间的碰撞,所以冰球可以根据木槌碰撞时的速度和角度改变方向和速度(或速度),而不改变木槌的速度。我更喜欢在物理学中不一定100%正确的解决方案,因为我不想改变整个游戏,但我希望它能够工作并且合理。我使这是Java,但我不介意在伪代码或其他语言的答案,以便其他人可以从这篇文章中受益。这里是我在游戏中更新方法的代码:与圆圈的弹性碰撞
public void update(long tP) {
if (!getPause() && getGameMode()!="menu") {
player.update(player.getDistanceX(), player.getDistanceY(), getFps());
computer.update(puck.getX(), puck.getY());
puck.update();
if (puck.circleCollide(player)||puck.circleCollide(computer)) {
puck.setSpeedX((int)(-5*getScaleFactor()));
}
if (puck.rectCollide(myGoal) || puck.rectCollide(computerGoal)) {
String scorer = puck.rectCollide(myGoal) ? "Computer" : "Player";
puck.setSpeedX(0);
puck.setSpeedY(0);
puck.setX(s.getWidth()/2);
puck.setY(s.getHeight()/2);
if (scorer=="Computer") {
computer.addGoal();
} else if (scorer=="Player") {
player.addGoal();
}
}
}
}
此时冰球刚以特定速度向左移动。这是我想让它做别的事情的地方。所有其他帖子都假设两个圆圈在碰撞后可以移动,并且不考虑碰撞角度。
注意:你可能不想比较一个'String'和'!='。做'!getGameMode()。equals(“menu”)' – TameHog
你做过“冰球”,“球员”和“计算机”类吗?如果是这样,他们的代码可能会有用。 – ricky3350
的确,我应该考虑一下。为了不比较参考,但价值。 –