朋友们,我将非常感谢任何答案,提前感谢,这是我的问题:
在 pyglet 中,这是在屏幕中更新精灵的基本代码:
sprite.x=50
pixels=10
def update(dt):
if move_right == True:
sprite.x += pixels * dt
pyglet.clock.schedule_interval(update, 1/60.0)
如果按下右键,这将导致精灵以每秒 10 像素的速度从点 x 向右移动。
但是让我们假设我需要在一个变量处从 X1 点精确移动到 X2 点,并在 X2 点精确停止,我该怎么做?
想象一下:
x_start=20
x_finish=40
我想从 x=20 移动到 x=40,并在 x=40 处停止。每秒像素数可以是任何值,在此示例中假设为 10 个像素。
如果我使用通常的代码,我可以这样做:
sprite.x=20
pixels=10
def update(dt):
if sprite.x != 40:
if move_right == True:
sprite.x += pixels * dt
pyglet.clock.schedule_interval(update, 1/60.0)
这是行不通的,因为pixel*dt不等于10,dt是不规则的并且是浮点数(1/60=0.01, 0.01*10= 0.1,并且 dt 也是不规则的,所以有时是 0.01,其他是 0.019,其他0.021...等),所以每次更新执行 sprite.x 进化都是这样的 --> 10, 10,1, 10,24, 10,38, 10.51...等
所以,if sprite.x != 40:永远不会起作用(因为 sprite.x 总是一个浮点数,几乎不会是 40),我的播放器永远不会停止。
我知道这个问题有一个非常简单的解决方案,但我不知道,我很绝望。我正在pyglet开始我的旅程,所以我在这个阶段非常无知,需要帮助找到解决方案,我找不到出路。
是否有其他技术可以在不使用sprite.x += pixel*dt的情况下每帧更新一个精灵?还有其他解决方案吗?
非常非常感谢,来自葡萄牙的问候