编程语言
首页 > 编程语言> > python – pyglet:按下按钮时更改精灵实例的图像

python – pyglet:按下按钮时更改精灵实例的图像

作者:互联网

此代码在黑色背景上显示图像assassin1.png.一旦我按下按键,图像就会向右移动,一旦我松开按键就会停止移动.

一旦我按下键,它也应该更改为图像assassin2.png,当我释放键时,它应该更改回assassin1.png.
但是,此代码在移动时从不显示assassin2.png图像.为什么会这样,我该如何解决这个问题呢?

import pyglet

class Assassin(pyglet.sprite.Sprite):
    def __init__(self, batch, img):
        pyglet.sprite.Sprite.__init__(self, img, x = 50, y = 30)

    def stand(self):
        self.img = pyglet.image.load("assassin1.png")
        return self

    def move(self):
        self.img = pyglet.image.load('assassin2.png')    
        return self

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, img = pyglet.image.load("assassin1.png"))
        self.keys_held = []      
        self.schedule = pyglet.clock.schedule_interval(func = self.update, interval = 1/60.) 

    def on_draw(self): 
        self.clear()         
        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 = self.player.move()
            print "The 'RIGHT' key was pressed"

    def on_key_release(self, symbol, modifiers):
        self.keys_held.pop(self.keys_held.index(symbol))
        self.player = self.player.stand()
        print "The 'RIGHT' key was released"

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

解决方法:

我看了pyglet’s source code,我觉得问题在这里:

self.img = pyglet.image.load(...

图像存储在self.image变量中,而不是self.img中.所以改为:

self.image = pyglet.image.load(...

应该更新精灵正在使用的图像.

标签:python,sprite,pyglet
来源: https://codeday.me/bug/20190902/1787622.html