Tot*_*tem 3 python pygame python-2.7 python-3.x
我有两个精灵组,ship_list
有20个精灵,all_sprites
有20个精灵,还有玩家精灵.在主循环中,当在玩家和其他任何东西之间检测到碰撞时ships_list
,我理解与玩家相撞的船精灵将被移除ships_list
.当我运行程序时,所有精灵都会出现,并且通过将玩家移动到船精灵中它会消失.一切都很好,除了..我不明白为什么他们正在消失.原因是虽然我知道船只ships_list
在碰撞后被移除,但all_sprites
实际上每个框架都重新绘制了这个列表,并且我没有在任何时候明确地删除任何东西,所以碰撞的情况也是如此还要从中删除船只精灵all_sprites
?
ship_list = pygame.sprite.Group() # just ship sprites
all_sprites = pygame.sprite.Group() # ship sprites + player sprite
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT or score == 20:
done = True
screen.fill(BLACK)
pos = pygame.mouse.get_pos()
player.rect.x = pos[0]
player.rect.y = pos[1]
**# is this line removing sprites from all_sprites??**
ships_hit_list = pygame.sprite.spritecollide(player, ship_list, True) # detect collisions
for ship in ships_hit_list:
score += 1
print score
all_sprites.draw(screen) # seems to lose sprites when ships_list does..
ship_list.update() # updating the position
pygame.display.flip()
clock.tick(24)
# properly quit
pygame.quit()
Run Code Online (Sandbox Code Playgroud)
来自https://www.pygame.org/docs/ref/sprite.html#pygame.sprite.spritecollide
Run Code Online (Sandbox Code Playgroud)pygame.sprite.spritecollide()
在与另一个精灵相交的组中查找精灵.
Run Code Online (Sandbox Code Playgroud)spritecollide(sprite, group, dokill, collided = None) -> Sprite_list
返回一个列表,其中包含与另一个Sprite相交的Group中的所有Sprite.通过比较每个Sprite的Sprite.rect属性来确定交集.
dokill论证是一个博尔.如果设置为True,则将从组中删除所有碰撞的Sprite.(它没有提到它从任何其他组删除..)
如果您查看精灵打印时显示的内容,您将看到它显示精灵存在的组数.
Sprite有一个名为的方法kill
:
从所有组中删除Sprite
kill() - >无
Sprite将从包含它的所有组中删除.这不会改变关于Sprite状态的任何信息.调用此方法后,可以继续使用Sprite,包括将其添加到Groups.
似乎是什么sprite_collide
,kill()
如果发生碰撞,它只是调用精灵.
归档时间: |
|
查看次数: |
3028 次 |
最近记录: |