繁体   English   中英

在Pygame上使用类显示图像

[英]Displaying an image using a class on 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) 

Sprite没有draw()函数,但是其他函数(即pygame.sprite.Group )直接使用self.imageself.rect来绘制此Sprite。

您可以创建自己的函数draw()来执行相同操作

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

您不必两次加载Enemy.gif Enemy类内部或外部执行此操作,然后使用image作为参数Enemy( ..., image) (或使用filename 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()

顺便说一句:其他Pygame代码模板图像

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM