Python - Pygame - 类__init___问题/不绘图

问题描述 投票:3回答:1

我正在学习OOP,我有几个问题。调用initiliazer时,代码会自动处理吗?因为如果是这种情况,我不明白为什么我的游戏没有绘制矩形我要求它在播放器类的init部分绘制。我对OOP很新,因此我在某种程度上不确定我在做什么。这是我的代码:

import pygame

white = (255, 255, 255)
black = (0, 0, 0)

class Game():
    width = 800
    height = 600
    screen = pygame.display.set_mode((width, height))
    def __init__(self):
        pass
    def fill_screen(self, color):
        self.color = color
        self.screen.fill(self.color)

class Player(pygame.sprite.Sprite):
    lead_x = 800/2
    lead_y = 600/2
    velocity = 0.002
    block_size = 10
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.draw.rect(game.screen, black, [self.lead_x, self.lead_y, self.block_size, self.block_size])

    def move_player_x_left(self):
        self.lead_x += -self.velocity

    def move_player_x_right(self):
        self.lead_x += self.velocity

    def move_player_y_up(self):
        self.lead_y += -self.velocity

    def move_player_y_down(self):
        self.lead_y += self.velocity

game = Game()
player = Player()

exitGame = False
while not exitGame:
    game.fill_screen(white)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exitGame = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                player.move_player_y_up()
            if event.key == pygame.K_s:
                player.move_player_y_down()
            if event.key == pygame.K_d:
                player.move_player_x_right()
            if event.key == pygame.K_a:
                player.move_player_x_left()
    pygame.display.update()
pygame.quit()
quit()
python pygame
1个回答
2
投票

你不断在主循环中用白色填充屏幕。 Player类只吸引__init__。这意味着矩形被画一瞬间然后被白色覆盖。

您自动调用__init__中代码的假设是正确的。具有双下划线的这些方法在特殊情况下由python调用,它们被称为魔术方法。你可以找到它们的列表here

def __init__(self):
    pygame.sprite.Sprite.__init__(self)
    # The rect drawing part was moved from here.
def update(self):
    # You were previously assigning this to a variable, this wasn't necessary.
    pygame.draw.rect(game.screen, black, [self.lead_x, self.lead_y, self.block_size, self.block_size])

填满屏幕后,您需要在主循环中调用新的更新方法。

while True:
    game.fill_screen(white)
    player.update()
© www.soinside.com 2019 - 2024. All rights reserved.