gpt4 book ai didi

python-3.x - 向左移动时如何修复错误的减速?

转载 作者:行者123 更新时间:2023-12-04 19:54:36 25 4
gpt4 key购买 nike

我刚开始在 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

它在向右移动时工作正常,但在向左移动时对象没有准时停止。相反,它减速到一个点,然后以非常慢的速度继续前进一段时间,然后停止。

最佳答案

首先,让我们看看算法背后的数学原理。
按下按钮时,速度和位置会根据加速度 a 发生变化,在 t(函数运行的次数)处,初始值为 v0 和 x0

v = v0 + a * t

x = x0 + Σ(i=1 to t) i * a
or
x = x0 + (t2+t) * a/2


当释放按钮时(加速度为 0),速度 v 呈几何下降

v = v0 * 0.91t


10 次调用后,我们有 ~0.39 v,100 次调用后 ~10-5 v。这意味着,在视觉上,位置 x 减速并停止,一段时间后 v 太小而无法产生影响。
数学与游戏中看到的一致。
问题是为什么该算法在左侧不起作用。
虽然它应该工作相同,左和右。
不同的是,左侧,
  • 按下 LEFT 后,速度 v 更有可能为负
  • 位置 x 可能在某个时候变为负数(并且必须检查)

  • 由于提供的代码(可能)不包括要更改的部分,一些建议:
  • 如果 abs(v) 小于 10-5 或位置在视觉上不会改变的其他小值(小于一个像素),您可以将速度强制为 0。
  • 确保在极限处检查 x 值,尤其是对于负值。
  • 调试:显示/记录 v 和 x 值,尤其是在 LEFT 释放后。这样,当整个程序运行时,您将更容易识别出问题的来源。

  • 如果这不能解决您的问题,您可以编辑您的问题并添加更多相关代码。

    关于python-3.x - 向左移动时如何修复错误的减速?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54170775/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com