使用update方法控制Pyglet中的精灵动画

时间:2011-05-14 10:13:18

标签: python pyglet

我是朋友,我会非常感激任何答复,提前谢谢,这是我的问题:

在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 的情况下每帧更新精灵?还有其他解决方案吗?

非常感激, 来自葡萄牙的问候

1 个答案:

答案 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)