2 回答

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
有一個(gè)基本的誤解。Shot
源自pygame.sprite.Sprite
. 它必須在的唯一容器是pygame.sprite.Group
( all_sprites
)。
您不需要單獨(dú)的容器shots
:
Akso 你不需要初始Shot對(duì)象,因?yàn)椴皇?aShot生成 new Shot,而是Player生成一個(gè) 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()
請(qǐng)注意,您screen.blit(self.image, self.rect)在and的.update方法中不需要任何內(nèi)容,因?yàn)檫@就是:PlayerShotpygame.sprite.Group.draw()

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
此行導(dǎo)致錯(cuò)誤: shot = Shot()
該__init__
方法Shot
需要一個(gè)x
和y
位置參數(shù),但你沒有通過他們。
添加回答
舉報(bào)