3

我开始创建我的第一个 pygame 游戏,它使用多个模块(.py 文件)以便于理解代码,所以我们开始吧。

主文件

import pygame,sys
from Player import *
from groups import *
from constants import *
from Events import *

pygame.init()
screen = pygame.display.set_mode(size)
player = Player()
player.add_to_group()

while True:
    player.draw(screen)
    event = Event()

播放器.py

import pygame
from groups import *


class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface([30,30])
        self.image.fill([255,0,0])
        self.rect = self.image.get_rect()

    def move_player(self):
        key = pygame.key.get_pressed()
        if key[pygame.K_DOWN]:
            self.rect.y += 1
        elif key[pygame.K_UP]:
            self.rect.y -= 1
        elif key[pygame.K_RIGHT]:
            self.rect.x += 1
        elif key[pygame.K_LEFT]:
            self.rect.x -= 1

    def add_to_group(self):
        all_sprite_list.add(self)

    def remove_from_group(self):
        all_sprite_list.remove(self)

    def draw(self,surface):
        surface.blit(self.image,(0,0))

组.py

import pygame
all_sprite_list = pygame.sprite.Group()

常量.py

import pygame

size = width,heighth = 700,400

事件.py

import pygame,sys

class Event(object):
    def __init__(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

结果应该是代表玩家的左上角的红色方块。但无论我这样做,我都没有收到任何错误,但它只显示一个空白的黑色窗口。

我尝试修复它几次(比如使用 .draw 绘制整个“all_sprite_list”),但没有任何效果。

4

1 回答 1

1

您需要updateflip显示:

while True:
    player.draw(screen)
    event = Event()
    pygame.display.update()

此外,我建议您在主循环中处理事件,或者至少不在 init 方法中处理事件,前提是您可以创建 Events 对象并始终在同一个对象中调用方法。

顺序应该是:

  1. 处理事件以更新游戏状态
  2. 干净的背景screen.fill()
  3. 更新显示
  4. 使用时钟保持 fps 速率。
于 2013-07-09T15:18:09.700 回答