我是朋友,我会非常感激任何答复,提前谢谢,这是我的问题:
在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)
如果按下右键,这会导致精灵从点x向右移动,每秒10像素,然后按下右键。
但我们假设我需要在变量处从点X1移动到点X2,在X2点准确地停止,我该怎么做?
想象一下:
的 x_start = 20
的 x_finish = 40
我想从x = 20移动到x = 40,并且在<= 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)
这不起作用,因为像素* dt 不等于 10 , dt 不规则且浮动(1/60 = 0.01,0.01 * 10 = 0.1 ,dt也不规则,所以有时为0.01,其他为0.019,其他为0.021 ......等,所以每次更新执行时sprite.x evolution是像这样的东西 - &gt; 10,10,1,10,24,10,38,10.51等等
所以,如果sprite.x!= 40:永远不会起作用(因为sprite.x将永远是 float ,几乎不会是40)和我的播放器永远都不会停止。
我知道这个问题我有一个非常简单的解决方案,但我没有任何线索,我绝望。我正在开始我的pyglet之旅,所以我在这个阶段非常无知,需要帮助才能找到解决方案,我无法找到出路。
是否有其他技术可以在不使用 sprite.x + = pixels * dt 的情况下每帧更新精灵?还有其他解决方案吗?
非常感激, 来自葡萄牙的问候
答案 0 :(得分:0)
这是一种方法
sprite.x=20
pixels=10
def update(dt):
if sprite.x != 40:
if move_right == True:
sprite.x = min(sprite.x + pixels * dt, 40)
pyglet.clock.schedule_interval(update, 1/60.0)