2

このコードを機能させる方法: pyglet をインストールして変更"assassin1.png""assassin2.png"、このコードをファイルに保存したディレクトリに保存されている画像の名前を付けます。

import pyglet

class Assassin(pyglet.sprite.Sprite):
    def __init__(self, batch):
        pyglet.sprite.Sprite.__init__(self, pyglet.resource.image("assassin1.png"))
        self.x = 50
        self.y = 30
    def forward_movement(self):
        pass # How do I continously change between 'assassin1.png' and 'assassin2.png'?    

class Game(pyglet.window.Window):
    def __init__(self):
        pyglet.window.Window.__init__(self, width = 315, height = 220)
        self.batch_draw = pyglet.graphics.Batch()
        self.player = Assassin(batch = self.batch_draw)
        self.fps_display = pyglet.clock.ClockDisplay()
        self.keys_held = []      
        self.schedule = pyglet.clock.schedule_interval(func = self.update, interval = 1/60.) 

    def on_draw(self):
        self.clear()
        self.fps_display.draw()
        self.batch_draw.draw()
        self.player.draw()  

    def on_key_press(self, symbol, modifiers):
        self.keys_held.append(symbol)
        if symbol == pyglet.window.key.RIGHT:
            self.player.forward_movement()
            print "The 'RIGHT' key was pressed"

    def on_key_release(self, symbol, modifiers):
        self.keys_held.pop(self.keys_held.index(symbol))

    def update(self, interval):
        if pyglet.window.key.RIGHT in self.keys_held:
            self.player.x += 50 * interval

if __name__ == "__main__":
    window = Game()
    pyglet.app.run()

説明: このコードは、fps が表示される黒い背景画面を作成し、画像 "assassin1.png" を位置 (50, 30) に表示します。右方向ボタンを押している間、画像は右に移動します。

目標:右方向ボタンが押された状態で画像が移動するたびに、assassin1.png画像が定期的に (0.25 秒ごとに) 2 番目の画像に変更されるように実装したいと思いますassassin2.png。これは、イメージが歩いているような漠然とした錯覚を生み出すためです。

この目標を達成するにはどうすればよいですか?

forward_movement()目的を達成するためのコードを配置するのに適切な場所と思われる Assassin クラスに空のメソッドを既に作成しました。しかし、コードを別の場所に配置したい場合は、それも問題ありません。

4

1 に答える 1

5

pyglet.sprite.Spriteクラスを使用すると、その画像をいつでもアニメーションに編集できます。そのため、スプライト コンストラクターで、歩行アニメーションを定義します。

def __init__(self, batch):
    # The image to display when not moving
    self._img_main = pyglet.image.load('assassin.png')

    self._img_right_1 = pyglet.image.load('assassin1.png')
    self._img_right_2 = pyglet.image.load('assassin2.png')
    self.anim_right = pyglet.image.Animation.from_image_sequence([
        self._img_right_1, self._img_right_2], 0.5, True)
    # 0.5 is the number in seconds between frames
    # True means to keep looping (We stop it later)

    pyglet.sprite.Sprite.__init__(self, self._img_main)
    #...

次に、アニメーションを簡単に変更できる関数を追加します。

def forward_movement(self, flag=True):
    if flag:
        self.image = self.anim_right # Now our sprite animates
    else:
        self.image = self._img_main

最後に、適切なタイミングで関数を呼び出します。

#...
def on_key_press(self, symbol, modifiers):
    self.keys_held.append(symbol)
    if symbol == pyglet.window.key.RIGHT:
        self.player.forward_movement(True)
        print "The 'RIGHT' key was pressed"

def on_key_release(self, symbol, modifiers):
    self.keys_held.pop(self.keys_held.index(symbol))
    if symbol == pyglet.window.key.RIGHT:
        self.player.forward_movement(False) # We have stopped moving
#...

そしてほら!ユーザーが右キーを押したままにすると、スプライトが移動してアニメーション化されます!

于 2012-09-20T10:30:42.673 に答える