在我见过的有关Pyglet的所有Web教程中,似乎没有一个教程使用类来包含pyglet.window.Window实例。例如,大多数教程看起来像
import pyglet game_window = pyglet.window.Window() @game_window.event def on_draw(): #dostuff while __name__ == "__main__": pyglet.app.run()
我在将这段代码重组为一个类时遇到麻烦。我打算这样做的代码在这里:
import pyglet from pyglet.gl import * from Board import Board class Frontend: def __init__(self,xs, ys): self.GameInstance = Board(xs,ys) self.GameWindow = pyglet.window.Window(width=512, height=512,visible=False) @GameWindow.event def on_draw(self): self.GameWindow.clear() f = Frontend()
运行此代码时,出现以下错误:
Traceback (most recent call last): File "C:/Users/PycharmProjects/Nothing/2048/Frontend.py", line 7, inclass Frontend: File "C:/Users/PycharmProjects/Nothing/2048/Frontend.py", line 13, in Frontend @GameWindow.event NameError: name 'GameWindow' is not defined
当我更换@GameWindow.event
同@self.GameWindow.event
在试图解决NameError我得到:
Traceback (most recent call last): File "C:/Users/PycharmProjects/Nothing/2048/Frontend.py", line 7, inclass Frontend: File "C:/Users/PycharmProjects/Nothing/2048/Frontend.py", line 13, in Frontend @self.GameWindow.event NameError: name 'self' is not defined
我期望的。但是,我不确定该代码为什么不起作用-有人可以解释为什么以及如何解决它吗?
您可以从Window继承。这应该工作:
class Frontend(pyglet.window.Window): def __init__(self, xs, ys): self.GameInstance = Board(xs,ys) super().__init__(width=512, height=512,visible=False) def on_draw(self): self.clear()
您的代码无法正常工作,因为您无法在方法之外引用Frontend类的实例。如果您只有Frontend类的一个实例,则可以执行以下操作:
class Frontend: window = pyglet.window.Window() def __init__(self): ... @window.event def on_draw(): ...