长话短说我正在使用Pyglet在python 3中制作基于文本的游戏,我无法清除窗口。我想清除所有内容,这样我就可以放入新词和新图片了。我希望能像这样设置它:
@window.event
def on_key_press(key.escape,modifier)
window.clear
或者沿着这些方向的东西,但它似乎不起作用。有没有人有任何建议,想法?唯一的另一个想法是将单词转换为黑色,将任何图像转换为黑色并将其分层,但随后窗口仍将加载那些东西,我可以看到随着游戏的继续,它开始吃掉越来越多的ram来运行带有它的窗口加载所有以前的图片和文字。
我宁愿避免这种情况,只是将其清除,然后我也不必一遍又一遍地复制相同的代码使其变黑。
谢谢, 本
答案 0 :(得分:1)
import pyglet
from pyglet.gl import *
from time import time # Used for FPS calc
key = pyglet.window.key
class main(pyglet.window.Window):
def __init__ (self):
super(main, self).__init__(800, 800, fullscreen = False, vsync = True)
self.running = True
self.fps_counter = 0
self.last_fps = time()
self.fps_text = pyglet.text.Label(str(self.fps_counter), font_size=12, x=10, y=10)
def on_key_press(self, symbol, modifiers):
if symbol == key.ESCAPE: # [ESC]
self.running = False
else:
self.clear() # However, this is done in the render() logic anyway.
def on_draw(self):
self.render()
def render(self):
self.clear()
# And flip the GL buffer
self.fps_counter += 1
if time() - self.last_fps > 1:
self.fps_text.text = str(self.fps_counter)
self.fps_counter = 0
self.last_fps = time()
self.fps_text.draw()
self.flip()
def run(self):
while self.running is True:
self.render()
# -----------> This is key <----------
# This is what replaces pyglet.app.run()
# but is required for the GUI to not freeze
#
event = self.dispatch_events()
if event and event.type == pygame.QUIT:
self.running = False
x = main()
x.run()
这是FPS计数器对黑屏的快速而脏的复制和粘贴逻辑 每次按键都会强行清除屏幕。
在您的示例中,您可能会将pyglet.window.Window()
存储为myWindow = py...
或类似的内容。在这个全局变量上,您可以从装饰器中调用myWindow.clear()
。
import pyglet
myWindow = pyglet.window.Window()
@myWindow.event
def on_key_press(symbol, modifier):
myWindow.clear()
pyglet.all.run()
(最后你没有:
,key.escape
应该只是一个变量而clear
是一个函数而不是一个变量。)
但是,如果您要继续编写大型图形应用程序,我强烈建议您对代码进行分类并使其成为&#34; OOP&#34;蝙蝠,图形库往往会变得凌乱,否则很快。