我目前正在为一项大学作业创建一个类似于乒乓球的游戏。为了让你对游戏的工作原理有一个大致的了解,在屏幕底部有一个水平移动的单一球拍。还有一个球将在屏幕上移动,玩家必须使用球拍阻止球离开屏幕底部。每次球打到屏幕的顶部,球员就得一分。
我已经设法让比赛的大部分时间正常工作,但我在球和球拍之间的碰撞上遇到了一些问题。目前,如果球以每帧1像素的速度移动,则碰撞可以正常工作。然而,对于规范,球的速度必须是可变的,因此球需要能够在所有速度下正确地与球拍碰撞。
我目前使用的碰撞代码如下:
if((ball.y+5) == (bat.y))
{
if(ball.x >= bat.x && ball.x <= (bat.x+40))
{
ball.dy = -ball.dy;
game.goingUp = true;
}
}本质上,这将测试球的坐标是否等于球拍的坐标,如果是这样,将改变球的方向。然而,由于这具有特定的坐标,球可能会以更高的速度完全通过球棒。
我想做的是让这个碰撞以每帧10像素的速度工作,但我真的不确定如何做到这一点,任何帮助都会非常感谢。
发布于 2017-01-07 02:37:43
我相信解决这个问题的方法就是他们所说的“扫荡”。取最后一个位置和当前位置,创建一条直线(如果您正在处理更复杂的对象,则创建一个更大的矩形),然后用它进行碰撞检查。
应该注意的是,任何大于一个像素的东西都可以表示为边界框,它们是矩形或圆形,相对简单。
https://stackoverflow.com/questions/41511840
复制相似问题