2012-06-27 21 views
2

如何使此代碼正常工作:安裝pyglet並將"assassin1.png""assassin2.png"更改爲存儲在將此代碼保存到文件的目錄中的圖像名稱。在pyglet中定期更改圖像(精靈?)

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() 

說明:這一代碼創建一個黑色背景屏幕,其中顯示幀率和 圖像「assassin1.png」在位置(50,30)被顯示。只要按住正確的方向按鈕,圖像就會向右移動。

目標:我想實現,每當右方向按鈕被保持並且該圖像被移動時,assassin1.png圖像週期性地改變與第二圖像assassin2.png(每0.25秒左右)。這是爲了創造圖像走路的模糊幻覺。

我該如何實現這個目標?

我已經在刺客類中創建了一個空的forward_movement()方法,它似乎是一個合適的位置來讓代碼實現我的目標。但是如果你想把代碼放在另一個地方,那也可以。

回答

4

pyglet.sprite.Sprite類允許您在任何時候將其圖像編輯爲animation。所以,在精靈的構造函數,我們定義了一個散步的動畫:

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 
#... 

而且瞧!當用戶按下右鍵時,精靈會移動並生成動畫!