无法将精灵绘制到屏幕上

时间:2013-07-09 14:48:06

标签: python module pygame sprite

我开始创建我的第一个使用多个模块(.py文件)的pygame游戏更容易 理解代码所以我们走了。

main.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()

Player.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))

groups.py

import pygame
all_sprite_list = pygame.sprite.Group()

constants.py

import pygame

size = width,heighth = 700,400

Events.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”) 但没有任何效果。

1 个答案:

答案 0 :(得分:0)

您需要updateflip显示:

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

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

订单应该是:

  1. 处理事件以更新游戏状态
  2. 清理背景screen.fill()
  3. 绘制
  4. 更新显示
  5. 使用时钟保持fps速率。