我编写此代码是因为我想使用关键箭头移动精灵。 我想没什么特别的。
我花了很多时间搜索显示和移动简单图片的教程。
以下是我的代码:
第一部分是非常标准的,导入库并定义程序的特征值:
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()
如果我完全错误地计算了类精灵的模态,有人可以解释如何为这种情况设置类船吗?
答案 0 :(得分:0)
阅读文档。
pygame.sprite.Group.draw()
和 pygame.sprite.Group.update()
是由 pygame.sprite.Group
提供的方法。
前者将 委托给包含的 pygame.sprite.Sprite
s 的 update
方法 - 您必须实现该方法。见pygame.sprite.Group.update()
:
对组中的所有 Sprite 调用 update()
方法 [...]
后者使用包含的 image
的 rect
和 pygame.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)