Pygame,精灵没有出现甚至移动

时间:2017-03-22 00:55:54

标签: python pygame sprite

我编写此代码是因为我想使用关键箭头移动精灵。 我想没什么特别的。

我花了很多时间搜索显示和移动简单图片的教程。

以下是我的代码:

第一部分是非常标准的,导入库并定义程序的特征值:

import sys
import pygame

pygame.init()

#refer value
border_X=800
border_Y=600
FPS=30
POS_X=300
POS_Y=300
INCREASE_X=0
INCREASE_Y=0

screen=pygame.display.set_mode((border_X,border_Y))
clock=pygame.time.Clock()

这里我定义了sprite类,可能会对类的定义产生误解,也许我以不正确的方式使用了rect.center

class Ship(pygame.sprite.Sprite):
       image = pygame.image.load("fighter_0.png")
       image = image.convert_alpha()
       def __init__(self, X_INIT, Y_INIT):         
           super(Ship, self).__init__()
           self.image = Ship.image
           self.rect = self.image.get_rect()
           self.rect.center = (X_INIT, Y_INIT)
       def update(self,x,y):
           self.rect.center = (x,y)

这里我创建了精灵组,可能它不是单个精灵所必需的,但这个程序的主要目的是学习。

在任何情况下,我都试图显示精灵而不创建群组'字符'

character = pygame.sprite.Group()
Ship.groups=character
ship=Ship(POS_X,POS_Y)
ship.add(character)

最后是循环周期,可能在更新模式中存在错误

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:             
        if event.type == pygame.KEYUP:

        '''i've removed the if cycle of event.type 
           because it's long and unnecessary to 
           explain why the sprite doesn't appear'''  

    POS_X+=INCREASE_X
    POS_Y+=INCREASE_Y    
    ship.update(POS_X,POS_Y)
    clock.tick(FPS)
    #i've tried both, flip and update
    pygame.display.flip()
    pygame.display.update()

pygame.quit()

如果我完全错误地计算了类精灵的模态,有人可以解释如何为这种情况设置类船吗?

1 个答案:

答案 0 :(得分:0)

阅读文档。

pygame.sprite.Group.draw()pygame.sprite.Group.update() 是由 pygame.sprite.Group 提供的方法。

前者将 委托给包含的 pygame.sprite.Spritesupdate 方法 - 您必须实现该方法。见pygame.sprite.Group.update()

<块引用>

对组中的所有 Sprite 调用 update() 方法 [...]

后者使用包含的 imagerectpygame.sprite.Sprite 属性来绘制对象 - 您必须确保 pygame.sprite.Sprite 具有所需的属性。见pygame.sprite.Group.draw()

<块引用>

将包含的精灵绘制到 Surface 参数。这对源表面使用 Sprite.image 属性和 Sprite.rect。 [...]

因此您需要调用 Group draw() 的方法 character

while True:
    # [...]

    screen.fill((0, 0, 0))    

    character.draw(screen)

    pygame.display.flip()
    clock.tick(FPS)