2017-01-29 5 views
0

긴 이야기 짧게 Pyglet을 사용하여 텍스트 기반 게임을 Python 3에서 만들고 있는데 창을 지우는 데 문제가 있습니다. 나는 새로운 단어와 새로운 사진을 넣을 수 있도록 모든 것을 지우려 나는 이런 식으로 설정을 기대 하였다. 그 라인을 따라on_button_press 이벤트를 통해 pyglet.window.clear 함수를 어떻게 실행합니까?

@window.event 
def on_key_press(key.escape,modifier) 
    window.clear 

또는 뭔가를하지만 작동하지 않습니다. 누구 제안이나 아이디어가 있습니까? 유일한 아이디어는 단어를 검은 색으로 변환하고 모든 이미지를 검은 색으로 바꿔서 레이어를 구성하는 것입니다.하지만 창은 여전히 ​​그 물건을로드하고 게임이 계속 진행됨에 따라 볼 수 있습니다. 이전의 모든 그림과 텍스트를로드하는 창이 나타납니다.

나는 그것을 피하고 그냥 지우고 싶다. 그런 다음 기본적으로 같은 코드를 반복해서 검정색으로 복사 할 필요가 없다.

감사합니다, 벤

+0

당신이 게임을 만들려고한다면 2D와 Pyglet으로 빤히 쳐다보고 있습니다. 아래의 답변을 완료하면 http://hvornum.se/pyglet/이 도움이 될 것입니다. ** 나는 이것을 안다. ** 이것은 조잡하다. ***이 사이트 범위에서 벗어난 것이다. 난 그냥 올바른 방향 (특히 스프라이트와 배치 부분)에 몇 가지 포인터를 줄 수있을 줄 알았는데. – Torxed

답변

0
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 함수가 아니라 변수입니다.)

그러나 큰 그래픽 응용 프로그램을 작성 계속려고하는 경우에, 나는 강력하게 코드를 분류하고 그것을 "OOP"로 만들 것을 권하고 싶다. 그래픽 라이브러리는 지저분한 편이다.