1

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

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

下面是我的代码:

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

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

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

4

1 回答 1

0

阅读文档。

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

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

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

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

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

因此,您需要调用Groupdraw()的方法: character

while True:
    # [...]

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

    character.draw(screen)

    pygame.display.flip()
    clock.tick(FPS)
于 2020-12-23T08:13:02.613 回答