2017-01-29 1 views
0

Longue histoire courte Je fais un jeu basé sur le texte en python 3 en utilisant Pyglet et j'ai du mal à effacer la fenêtre. Je veux effacer tout pour que je puisse mettre de nouveaux mots et de nouvelles photos dans j'espérais le configurer comme ceci:.Comment exécuter la fonction pyglet.window.clear via un événement on_button_press?

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

Ou quelque chose dans ce sens, mais il ne semble pas fonctionner. Est-ce que quelqu'un a des suggestions, des idées? la seule autre idée serait de convertir les mots en noir et toutes les images en noir et en couches, mais alors la fenêtre sera encore en train de charger ce truc et je pourrais voir que le jeu continue il commence à manger de plus en plus ram pour courir la fenêtre avec elle chargeant toutes les images et le texte précédents. Je préférerais éviter cela et juste l'effacer, aussi je n'ai pas besoin de copier le même code encore et encore, ce qui le rendrait noir.

Merci, Ben

+0

Si vous cherchez à créer un jeu, et vous regardez avec 2D et Pyglet .. Comme une complétion à ma réponse ci-dessous - http://hvornum.se/pyglet/ cela pourrait aider. ** Je sais ** c'est brut comme *** et c'est en quelque sorte hors de la portée de ce site. Je pensais juste qu'il pourrait donner quelques indications dans la bonne direction (en particulier la partie sprites et lots). – Torxed

Répondre

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() 

Ceci est une logique de copier-coller rapide et sale d'un compteur de FPS sur un écran noir.
Chaque pression sur une touche effacera l'écran. Dans votre exemple, vous êtes probablement stocker pyglet.window.Window() comme myWindow = py... ou quelque chose de similaire. Et sur cette variable globale, vous appelez myWindow.clear() de votre décorateur.

import pyglet 
myWindow = pyglet.window.Window() 

@myWindow.event 
def on_key_press(symbol, modifier): 
    myWindow.clear() 

pyglet.all.run() 

(Vous ne disposaient pas d'un : à la fin, key.escape devrait juste être une variable et clear est une fonction pas une variable.)

Cependant, si vous allez continuer à écrire de grandes applications graphiques, Je vous suggère fortement de classer votre code et de le faire "OOP" dès le départ, les bibliothèques graphiques ont tendance à devenir désordonné plutôt rapide sinon.