2013-10-31 65 views
2

我寫了一段代碼,我試圖讓我的圖像出現在中心,但是當我運行它時,圖像並沒有出現,任何想法都在哪裏我錯了?PyGame:我的圖像沒有出現

(順便說一句,我測試不同的代碼,並加載圖像精細,所以沒有什麼不對Python或pygame的本身)

from __future__ import division 
import math 
import sys 
import pygame 


class MyGame(object): 
    def __init__(self): 
     pygame.mixer.init() 
     pygame.mixer.pre_init(44100, -16, 2, 2048) 
     pygame.init() 

     self.width = 800 
     self.height = 600 
     self.screen = pygame.display.set_mode((self.width, self.height)) 

     self.bg_color = 0, 0, 0 

     self.alien_img = pygame.image.load('alien.png') 
     self.alien_pos = ((self.width-rect.width)//4, 
          (self.height-rect.height)//4) 


     self.FPS = 30 
     self.REFRESH = pygame.USEREVENT+1 
     pygame.time.set_timer(self.REFRESH, 1000//self.FPS) 


    def run(self): 
     running = True 
     while running: 
      event = pygame.event.wait() 

      if event.type == pygame.QUIT: 
       running = False 

      elif event.type == self.REFRESH: 
       self.draw() 

      else: 
       pass # an event type we don't handle    

    def draw(self): 
     self.screen.fill(self.bg_color) 

     rect = self.alien_img.get_rect() 
     rect = rect.move(self.alien_pos) 
     self.screen.blit(self.alien_img, rect) 

     pygame.display.flip() 


MyGame().run() 
pygame.quit() 
sys.exit() 
+0

只是一個提示:'else:pass'部分什麼都不做。 – iCodez

+0

pixshi你可以看看我的答案! – Noelkd

回答

1

您需要移動:

rect = self.alien_img.get_rect() 

到以下行前初始化:

self.alien_pos = ((self.width-rect.width)//4, 
         (self.height-rect.height)//4) 

而經過:

self.alien_img = pygame.image.load('alien.png') 

以下是你的代碼的更改將這幅畫面的幀:

from __future__ import division 
import math 
import sys 
import pygame 


class MyGame(object): 
    def __init__(self): 
     pygame.mixer.init() 
     pygame.mixer.pre_init(44100, -16, 2, 2048) 
     pygame.init() 

     self.width = 800 
     self.height = 600 
     self.screen = pygame.display.set_mode((self.width, self.height)) 

     self.bg_color = 0, 0, 0 

     self.alien_img = pygame.image.load('alien.png') 
     rect = self.alien_img.get_rect() 
     self.alien_pos = ((self.width-rect.width)//4, 
          (self.height-rect.height)//4) 
     self.FPS = 30 
     self.REFRESH = pygame.USEREVENT+1 
     pygame.time.set_timer(self.REFRESH, 1000//self.FPS) 


    def run(self): 
     running = True 
     while running: 
      event = pygame.event.wait() 

      if event.type == pygame.QUIT: 
       running = False 

      elif event.type == self.REFRESH: 
       self.draw() 

      else: 
       pass # an event type we don't handle    

    def draw(self): 
     self.screen.fill(self.bg_color) 

     rect = self.alien_img.get_rect() 
     rect = rect.move(self.alien_pos) 
     self.screen.blit(self.alien_img, rect) 

     pygame.display.flip() 


MyGame().run() 
pygame.quit() 
sys.exit() 

你之前在那裏嘗試已經定義之前訪問矩形。我已經添加下面創建的窗口的圖片: the screen

會指出你的計劃,讓這幅畫中間不工作要做到這一點,你需要改變:

self.alien_pos = ((self.width-rect.width)//4, 
         (self.height-rect.height)//4) 

要:

self.alien_pos = (self.width//2 - rect.width//2, 
        self.height//2 - rect.height//2) 

這給需要的結果:

enter image description here

+0

如果你使用屏幕的矩形,你可以做'alien.rect.center = screen.center'或者如果沒有定義,那麼'alien.rect.center = pygame.display.get_surface()。get_rect()。center' – ninMonkey