我刚刚开始学习pygame中的游戏开发,我希望当玩家停止按下键时,玩家对象具有减速度。
这是我目前所拥有的:
def update(self):
self.accel_x = 0
keys = pg.key.get_pressed()
if keys[pg.K_LEFT]:
self.accel_x = -0.2
if keys[pg.K_RIGHT]:
self.accel_x = 0.2
if abs(self.vx) >= max_speed:
self.vx = self.vx/abs(self.vx) * max_speed
if self.accel_x == 0:
self.vx *= 0.91
self.vx += self.accel_x
self.vy += self.accel_y
self.rect.x += self.vx
self.rect.y += self.vy
向右移动时效果很好,但是向左移动时对象没有按时停下来。相反,它会减速到一个点,然后以很慢的速度继续运行一段时间,然后停止。
答案 0 :(得分:0)
首先,让我们看一下算法背后的数学原理。
按下按钮时,速度和位置基于加速度 a 在 t (函数运行的次数)处变化,初始值为v < sub> 0 和x 0
v = v 0 + a * t
x = x 0 +Σ(i = 1至t)i * a
或
x = x 0 +(t 2 + t)* a / 2
当释放按钮(加速度为0)时,速度 v 呈几何下降
v = v 0 * 0.91 t
在10次调用后,我们有〜0.39 v,在100次调用之后是〜10 -5 v。这意味着在视觉上,位置 x 减速并停止, v 太小而无法在一段时间后产生变化。
数学与游戏中所见一致。
问题是为什么该算法在左侧不起作用。
虽然应该一样,但是左右。
区别是左侧
由于提供的代码(可能)未涵盖要更改的部分,因此建议如下:
如果这不能解决您的问题,则可以编辑问题并添加更多相关代码。