Python pyglet:按下按钮时更改精灵实例的图像
此代码在黑色背景上显示图像Python pyglet:按下按钮时更改精灵实例的图像,python,sprite,pyglet,Python,Sprite,Pyglet,此代码在黑色背景上显示图像1.png。我一按下键,图像就会向右移动,松开键后图像就会停止移动 我一按该键,它也会变为图像sugger2.png,当我松开该键时,它会变回sugger1.png。 但是,此代码在移动时从不显示2.png图像。为什么会这样?我怎样才能解决这个问题 import pyglet class Assassin(pyglet.sprite.Sprite): def __init__(self, batch, img): pyglet.sprite.S
1.png
。我一按下键,图像就会向右移动,松开键后图像就会停止移动
我一按该键,它也会变为图像sugger2.png
,当我松开该键时,它会变回sugger1.png
。
但是,此代码在移动时从不显示2.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()
我看了一下,我认为问题出在这里:
self.img = pyglet.image.load(...
图像存储在self.image
变量中,而不是self.img
中。因此,改为:
self.image = pyglet.image.load(...
应该更新精灵正在使用的图像。不错!!谢谢你,你让我开心。我一直在努力解决这个问题。出于性能原因,请勿在游戏运行时加载图像。在程序运行到某些变量之前加载图像,然后将
self.image
指定给这些变量。