Pyglet: Ändern des Bildes einer Sprite-Instanz beim Drücken einer Taste

Dieser Code zeigt das Bild assassin1.png auf einem schwarzen Hintergrund an. Sobald ich die Taste drücke, bewegt sich das Bild nach rechts und hört auf zu bewegen, sobald ich den Schlüssel loslasse.

Sobald ich den Schlüssel drücke, sollte es auch auf das Bild assassin2.png wechseln und wenn ich den Schlüssel loslasse, soll es wieder zu assassin1.png wechseln. Dieser Code zeigt jedoch nie das assassin2.png Bild beim Bewegen. Warum ist das so und wie kann ich das beheben?

 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: Sprite.draw () und Batch.draw () funktionieren nicht, aber Image.blit tut
  • Python Animation Timing
  • Wie füge ich eine Zeile als Sprite in Pygame hinzu?
  • Pygame macht ein Sprite Gesicht die Maus
  • Kann konstante Tasteneingabe ein Sprite ständig bewegen?
  • Animiertes Sprite aus wenigen Bildern
  • Wie man Funktionen von Sprites in Gruppen anruft?
  • Schiebe-Sprites
  • One Solution collect form web for “Pyglet: Ändern des Bildes einer Sprite-Instanz beim Drücken einer Taste”

    Ich schaute auf den Quycode des Pygletts und ich denke, das Problem ist hier:

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

    Das Bild wird in self.image Variable gespeichert, nicht self.img . So ändern sich zu:

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

    Sollte das Bild aktualisieren, das der Sprite verwendet.

    Python ist die beste Programmiersprache der Welt.