Python Pygame,精灵不';不要出现甚至移动
我写这段代码是因为我想用箭头键移动精灵。 我想没什么特别的 我花了很多时间搜索显示和移动简单图片的教程 下面是我的代码: 第一部分相当标准,导入库并定义程序的特征值:Python Pygame,精灵不';不要出现甚至移动,python,pygame,sprite,pygame-surface,Python,Pygame,Sprite,Pygame Surface,我写这段代码是因为我想用箭头键移动精灵。 我想没什么特别的 我花了很多时间搜索显示和移动简单图片的教程 下面是我的代码: 第一部分相当标准,导入库并定义程序的特征值: 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((
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()
如果我完全错误地计算了“精灵”级的模式,有人能解释一下如何为这种情况设置“飞船”级吗?阅读文档 和是pygame.sprite.Group提供的方法 前者将任务委托给所包含的
update
方法—您必须实现该方法。见:
对组[…]中的所有精灵调用update()
方法
后者使用包含的pygame.sprite.sprite
s的image
和rect
属性来绘制对象-您必须确保pygame.sprite.sprite
s具有所需的属性。见:
将包含的精灵绘制到曲面参数。这将使用源曲面的Sprite.image
属性和Sprite.rect
。[……]
因此,您需要调用组字符的方法draw()
:
为True时:
# [...]
屏幕填充((0,0,0))
字符绘制(屏幕)
pygame.display.flip()
时钟滴答声(FPS)
阅读文档
和是pygame.sprite.Group提供的方法
前者将任务委托给所包含的update
方法—您必须实现该方法。见:
对组[…]中的所有精灵调用update()
方法
后者使用包含的pygame.sprite.sprite
s的image
和rect
属性来绘制对象-您必须确保pygame.sprite.sprite
s具有所需的属性。见:
将包含的精灵绘制到曲面参数。这将使用源曲面的Sprite.image
属性和Sprite.rect
。[……]
因此,您需要调用组字符的方法draw()
:
为True时:
# [...]
屏幕填充((0,0,0))
字符绘制(屏幕)
pygame.display.flip()
时钟滴答声(FPS)
您应该在其中的某个地方调用精灵组的draw方法。因此,如果您的精灵组是“character”,您可以调用character.draw(screen)来绘制该组中的所有精灵。否则,您必须单独blit每个图像。尝试在display.flip()@oxrock之前调用它,不幸的是,这是解释器的答案:[AttributeError:'Ship'对象没有属性'draw'],在代码中,“character”是您的spritegroup。老实说,你在上面的声明都很时髦。试着将你的飞船添加到你的角色群中,因为看起来你是在尝试向后操作。因此,声明精灵组。创建船,然后将船添加到组中。所以:character=pygame.sprite.Group(),然后ship=ship(POS_X,POS_Y),然后简单地character.add(ship)。现在在display.flip()之前的底部,您应该能够调用character.draw(screen)在屏幕上绘制您的飞船(以及角色中包含的所有精灵)。@oxrock,它似乎可以工作,我还解决了删除角色以更新屏幕的问题,非常感谢!没问题,快乐编码。在那里的某个地方,你应该调用精灵组的draw方法。因此,如果您的精灵组是“character”,您可以调用character.draw(screen)来绘制该组中的所有精灵。否则,您必须单独blit每个图像。尝试在display.flip()@oxrock之前调用它,不幸的是,这是解释器的答案:[AttributeError:'Ship'对象没有属性'draw'],在代码中,“character”是您的spritegroup。老实说,你在上面的声明都很时髦。试着将你的飞船添加到你的角色群中,因为看起来你是在尝试向后操作。因此,声明精灵组。创建船,然后将船添加到组中。所以:character=pygame.sprite.Group(),然后ship=ship(POS_X,POS_Y),然后简单地character.add(ship)。现在在display.flip()之前的底部,您应该能够调用character.draw(screen)在屏幕上绘制您的飞船(以及角色中包含的所有精灵)。@oxrock,它似乎可以工作,我还解决了删除角色以更新屏幕的问题,非常感谢!没问题,快乐编码。