2016-04-29 9 views
0

私は、Pygameで作成されたGUIを作成し編集するためのプログラムを開発しています。プログラム自体は素敵なGUIを持っていますので、私はその作成を簡単にするモジュールを作っています。今のところ他のものは私が期待どおりに動作しますが、私は解決できない問題を抱えています。どちらも理解できません。Pygameの表示を更新する際の問題

プログラムを起動すると黒いウィンドウが表示されます。問題は、ウィンドウが白で、画像がある黒い四角形を含むことです。私はそれをクリックして移動しようとしましたが、何も表示されませんでした。

最初に私はウィンドウを更新しなかったと思っていましたが、スクリプトをチェックして、私が行ったことを知りました。その後、私はウィンドウでさまざまなことを試し始め、実際の画面(モニタ)を終了するウィンドウの部分だけが更新され、ドラッグして画面に戻すと即座に更新されることがわかりました。

誰かが何が起こっているのか説明してもらえますか、なぜ起こっていますか、どのように修正できますか?

EDIT

私はそれを最小限にし、それを最大化した場合、ウィンドウにも正しく更新されていることが分かりました。だから問題はそれほど重要ではありませんが、それは非常に面倒です。ここで

はコードです:ここでは

import pygame 
import time 

def initialize(): 
    global display 
    global screen 
    pygame.init() 
    display = pygame.display 
    screen = None 

class Screen(): 
    def __init__(self, size, color=[255, 255, 255]): 
     global screen 
     self.size = size 
     self.color = color 
     self.screen = display.set_mode(self.size) 
     self.fill(self.color) 
     self.update() 
     screen = self 
    def update(self, rectangle=None): 
     display.update(rectangle) 
    def fill(self, color, rectangle=None): 
     self.screen.fill(color, rectangle) 
    def draw(self, sprite): 
     self.screen.blit(sprite.image, sprite.rectangle[0]) 

class Engine(): 
    def __init__(self): 
     self.events = [] 
     self.running = False 
    def update_events(self): 
     self.events += pygame.event.get() 
    def get_events(self): 
     events = self.events 
     self.events = [] 
     return events 
    def start(self, function=None, args=[], kwargs={}, frequency=21, function_first=False): 
     self.running = True 
     while self.running: 
      if function_first and function: 
       function(*args, **kwargs) 
      self.update_events() 
      if not function: 
       for event in self.events: 
        if event.type == pygame.QUIT: 
         self.running = False 
         pygame.quit() 
         break 
      if not function_first and function: 
       function(*args, **kwargs) 
      if self.running: 
       tick = 1.0/frequency 
       time.sleep(tick) 
    def stop(self): 
     self.running = False 

class Sprite(): 
    def __init__(self, rectangle, color=[0, 0, 0]): 
     self.rectangle = rectangle 
     self.color = color 
     self.image = None 
    def update(self): 
     global screen 
     screen.fill(self.color, self.rectangle) 
     screen.draw(self) 
    def load_image(self, image): 
     self.image = pygame.image.load(image).convert() 

if __name__ == "__main__": 
    initialize() 
    s = Screen([500, 500]) 
    e = Engine() 
    sprite = Sprite([[10, 10], [200, 200]]) 
    sprite.load_image("test.png") 
    sprite.update() 
    s.update() 
    e.start() 

はスクリーンショットです:私は、画面の外にウィンドウを引くと enter image description here

私はプログラムを起動すると enter image description here

私が戻すとき: enter image description here

答えて

0

コードにエラーがあります。

  1. あなたのメインループで画面を更新しません。

  2. メインループの繰り返しごとに常にpygame.event.getを呼び出す必要があります。

  3. は、あなたが正しいですpygame.time.clock.tick

+0

を使用し、time.sleepを使用しないでください。私はループの表示を更新しませんが、前に更新します。そして私の経験から、私はそれもうまくいくはずであることを知っています。 pygame.event.get()を呼び出すと、私はします。私のコードを見ると、私はループを開始するengine.start()を呼び出すことがわかります。その中で私はself.update_events()を呼び出します。それにもかかわらず、私が得意とする行動は、これまでになかったような行動です。 – Cosinux

+0

ウィンドウをドラッグできるようにするには、すべての反復で画面を更新する必要はありません。私はそれを周りにドラッグすることができる – Fredrik

+0

。しかし、イメージは表示されません。そして、それはいつもしました。画面を常に更新するかどうかは関係ありません。 – Cosinux

関連する問題