2016-11-05 82 views
0

我是使用pygame的新手,我正在嘗試創建一個在pygame上顯示圖像的類。我想製作它,這樣我最終可以將多個圖像放到屏幕上並將它們移動到屏幕上。目前我只想使用這種格式在屏幕上顯示圖像。任何人都可以告訴我這樣做的代碼並解釋爲什麼?在pygame上使用類顯示圖像

import pygame 
import time 
import random 

pygame.init() 

display_width = 1000 
display_height = 750 

Gameplay = False 

gameDisplay = pygame.display.set_mode((display_width,display_height)) 
clock = pygame.time.Clock() #Starts auto clock updater 

background_image = pygame.image.load("Image/Background.jpg").convert() 
gameDisplay.blit(background_image, [0, 0]) 

EnImg = pygame.image.load('Image\Enemy.gif') 

class Enemy(pygame.sprite.Sprite): 

    def __init__(self,dx,dy,image): 
     pygame.sprite.Sprite.__init__(self) 
     self.rect = pygame.image.load('Image\Enemy.gif') 
     self.image = image 
     self.rect.x = dx 
     self.rect.y = dy 

    def update(self): 
     pass 

while not Gameplay: 
    for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 

    gameDisplay.blit(background_image, [0, 0]) 
    EnImg = Enemy(500,500,EnImg) 
    EnImg.draw(screen) 
    game_change() 

    pygame.display.update() 
    clock.tick(60) 
+0

你必須分配圖像'self.image'然後'self.rect = self.image.get_rect()' – furas

+0

我得到的錯誤 '敵人'對象沒有屬性'畫' 我做了這個改變 – Steve

回答

1

Sprite沒有draw()功能,但其他功能(即pygame.sprite.Group)直接使用self.imageself.rect繪製這個精靈。

您可以創建自己的功能draw()做同樣的

def draw(self, screen): 
     screen.blit(self.image, self.rect) 

你不必加載Enemy.gif兩次。難道這裏面Enemy類或外面,然後用圖像作爲參數Enemy(..., image)(或使用文件名Enemy(..., filename)並加載內。)


它看起來是這樣的。

import pygame 

# --- constants --- (UPPER_CASE names) 

DISPLAY_WIDTH = 1000 
DISPLAY_HEIGHT = 750 
DISPLAY_SIZE = (DISPLAY_WIDTH, DISPLAY_HEIGHT) 

# --- classes --- (CamelCase names) 

class Enemy(pygame.sprite.Sprite): 

    def __init__(self, dx, dy, filename): 
     pygame.sprite.Sprite.__init__(self) 

     self.image = pygame.image.load(filename).convert() 

     self.rect = self.image.get_rect() 
     self.rect.x = dx 
     self.rect.y = dy 

     # - or shorter - 
     #self.rect = self.image.get_rect(x=dx, y=dy) 

     self.moving_left = False 
     self.moving_right = False 
     self.moving_up = False 
     self.moving_down = False 

    def update(self): 
     if self.moving_left: 
      self.rect.x -= 10 
     if self.moving_right: 
      self.rect.x += 10 
     if self.moving_up: 
      self.rect.y -= 10 
     if self.moving_down: 
      self.rect.y += 10 

    def handle_event(self, event): 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       self.moving_left = True 
      elif event.key == pygame.K_RIGHT: 
       self.moving_right = True 
      elif event.key == pygame.K_UP: 
       self.moving_up = True 
      elif event.key == pygame.K_DOWN: 
       self.moving_down = True 
     elif event.type == pygame.KEYUP: 
      if event.key == pygame.K_LEFT: 
       self.moving_left = False 
      elif event.key == pygame.K_RIGHT: 
       self.moving_right = False 
      elif event.key == pygame.K_UP: 
       self.moving_up = False 
      elif event.key == pygame.K_DOWN: 
       self.moving_down = False 

    def draw(self, screen): 
     screen.blit(self.image, self.rect) 

# --- fuctions --- (lower_case names) 

    # empty 

# --- main --- (lower_case names) 

# - init - 

pygame.init() 

screen = pygame.display.set_mode(DISPLAY_SIZE) 

# - objects - 

background_image = pygame.image.load("Image/Background.jpg").convert() 

enemy = Enemy(500,500, 'Image/Enemy.gif') 

# - mainloop - 

clock = pygame.time.Clock() 

gameplay = True 

while gameplay: 

    # - events - 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      gameplay = False 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_ESCAPE: 
       gameplay = False 

     # - objects event handle - 
     enemy.handle_event(event) 

    # - updates - 

    enemy.update() 

    # - draws - 

    screen.blit(background_image, (0, 0)) 
    enemy.draw(screen) 
    pygame.display.update() 

    # - FPS - 

    clock.tick(60) 

# - exit - 

pygame.quit() 

BTW:其他Pygame code templatesimage