2016-04-23 111 views
0

剛開始接觸pygame的(Python 2.7版,Win7的,I3),看着教程這裏:http://www.pygame.org/docs/tut/intro/intro.htmlpygame只在鼠標活躍在遊戲窗口時更新?

當我運行的代碼示例:

import sys, pygame 
pygame.init() 

size = width, height = 320, 240 
speed = [2, 2] 
black = 0, 0, 0 

screen = pygame.display.set_mode(size) 

ball = pygame.image.load('ball.bmp') 
ballrect = ball.get_rect() 

while 1: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: sys.exit() 

     ballrect = ballrect.move(speed) 
     if ballrect.left < 0 or ballrect.right > width: 
      speed[0] = -speed[0] 
     if ballrect.top < 0 or ballrect.bottom > height: 
      speed[1] = -speed[1] 

     screen.fill(black) 
     screen.blit(ball, ballrect) 
     pygame.display.flip() 

...從空閒或PowerShell中的當鼠標在遊戲窗口上移動時,遊戲窗口只會更新。我期待着這個球只會自行反彈。由於pygame/SDL處理圖形模式的方式,這是否與鼠標位置相關的性能?它與硬件有關嗎?有沒有辦法通過代碼提高性能?我想用pygame得到衆所周知的球,這看起來很奇怪。謝謝。

編輯:

while 1: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: sys.exit() 

    ballrect = ballrect.move(speed) 
    if ballrect.left < 0 or ballrect.right > width: 
     speed[0] = -speed[0] 
    if ballrect.top < 0 or ballrect.bottom > height: 
     speed[1] = -speed[1] 

    screen.fill(black) 
    screen.blit(ball, ballrect) 
    pygame.display.flip() 

回答

1

你有內部的功能更新代碼!把它移出來就可以了。

while 1: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: sys.exit() 

     ballrect = ballrect.move(speed) 
     if ballrect.left < 0 or ballrect.right > width: 
      speed[0] = -speed[0] 
     if ballrect.top < 0 or ballrect.bottom > height: 
      speed[1] = -speed[1] 

    screen.fill(black) 
    screen.blit(ball, ballrect) 
    pygame.display.flip() 
+0

heh ...(尷尬) –

+1

它發生在所有的時間或其他。 :) – emorphus