我正在尝试将 2D 物理实现到小行星类型的游戏中。我在窗口边界设置了碰撞边界。
但是,当我将我的船精灵碰撞到边界时(并反转 x 或 y 轴的适当速度),我在移动时偶尔会出现故障。船会暂时跳跃,但如果我按住移动键的时间足够长,它通常会自行修复。
问题是这个故障很明显。
相关代码部分:
#update velocity
def velocity(self, speed):
self.vx += math.sin(math.radians(self.angle)) * speed
self.vy += math.cos(math.radians(self.angle)) * speed
magnitude = math.sqrt(self.vx*self.vx + self.vy*self.vy)
if magnitude > self.maxvel:
self.vx *= 4/magnitude
self.vy *= 4/magnitude
if self.speed >= self.maxvel:
self.speed = self.maxvel
if self.speed <= -self.maxvel:
self.speed = -self.maxvel
我的运动代码:
if (key[K_UP]):
newShip.speed += 1
newShip.moving = 1
if (key[K_DOWN]):
newShip.speed -= 1
newShip.moving = 1
if (key[K_LEFT]):
newShip.angle += 4
if (key[K_RIGHT]):
newShip.angle -= 4
我的完整代码在这里:http ://pastebin.com/19rHq97R运行只需要 2 张图像,你可以使用我猜想的任何东西。
我认为这个问题与检测到碰撞时 x 或 y 速度的反转有关,但我无法确定确切的问题。任何见解都值得赞赏。
编辑:我做了更多调查。我想知道突然的跳跃是否是因为我没有编程任何类型的加速。http://pastebin.com/vFy9tjyN摘自我的终端日志。我从我的程序中打印出相关变量。