0

Kivyを使用してゲームをコーディングしています。アニメーション コードを配置する Screen クラスがあります。これは通常のゲームではなく、複数の画面に似ており、それぞれに独自のアニメーションがあり、異なる画面に移動するためのボタン コマンドがあります。

問題なく動作しますが、このようなクラスをさらに作成してすべてを ScreenManager に配置すると、アニメーションがランダムな白い画面で中断されます。

class Pas(Screen):
def __init__(self, **kwargs):   
    super(Pas, self).__init__(**kwargs)
    Clock.schedule_interval(self.update, 1 / 60.0)

    self.ani_speed_init = 15
    self.ani_speed = self.ani_speed_init
    self.ani = glob.glob("img/pas_ani*.png")
    self.ani.sort() 
    self.ani_pos = 0
    self.ani_max = len(self.ani)-1
    self.img = self.ani[0]  
    self.update(1)

    back = Button(
            background_normal=('img/back-icon.png'),
            background_down=('img/back-icon.png'),
            pos=(380, 420)) 
    self.add_widget(back)
    def callback(instance):
        sm.current = 'game'
    back.bind(on_press=callback)

def update(self, dt):
    self.ani_speed -= 1
    if self.ani_speed == 0:
        self.img = self.ani[self.ani_pos]
        self.ani_speed = self.ani_speed_init
        if self.ani_pos == self.ani_max:
            self.ani_pos = 0
        else:
            self.ani_pos += 1
    with self.canvas:
        image = Image(source=self.img, pos=(0, 0), size=(320, 480))

私は何を間違っていますか?また、これを行う別の方法についてのアイデアも受け付けています。

4

1 に答える 1

1

画面に Screen と ScreenManager を使用する場合は、それらが定義して使用するトランジション システムを使用することをお勧めします。そのため、独自のトランジションを定義して適用します。さらに制御が必要な場合は、Screen と ScreenManager に乗り、Widgets だけを使用して、描画/配置プロセス全体を制御することをお勧めします。

また、Clock.schedule_interval(self.update, 0) は呼び出しに相当し、アニメーションはフレームごとに呼び出され、dt を使用してアニメーションの進行を管理できます。

また、kivy は gif を管理できるだけでなく、画像の zip アーカイブを直接アニメーション化することもできます (アニメーション化された png があると便利です)。

于 2013-10-15T12:16:11.747 に答える