2 回答
TA贡献1841条经验 获得超3个赞
有一个基本的误解。Shot
源自pygame.sprite.Sprite
. 它必须在的唯一容器是pygame.sprite.Group
( all_sprites
)。
您不需要单独的容器shots
:
Akso 你不需要初始Shot对象,因为不是 aShot生成 new Shot,而是Player生成一个 new Shot:
class Player(pygame.sprite.Sprite):
# [...]
def update(self, keys, *args):
if keys[pygame.K_LEFT] and self.rect.x > vel:
self.rect.x -= vel
if keys[pygame.K_RIGHT] and self.rect.x < 800 - width - vel:
self.rect.x += vel
if keys[pygame.K_SPACE]:
all_sprites.add(Shot(self.rect.centerx, 550)) # <---- new shot
all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)
类Shot,只需要更新它自己的位置 ( .rect) 和.kill()它自己。
class Shot(pygame.sprite.Sprite):
def __init__(self,x,y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("images\laser.png")
self.rect = self.image.get_rect()
self.rect.center = (x, y)
self.vel = 10
def update(self, keys, *args):
if self.rect.x < 500 and self.rect.x > 0:
self.rect = self.rect.move(0, -self.vel)
else:
self.kill()
请注意,您screen.blit(self.image, self.rect)在and的.update方法中不需要任何内容,因为这就是:PlayerShotpygame.sprite.Group.draw()
添加回答
举报