我的角色在击中一个精灵组后应该就停止了,但我不知道该怎么做。 碰撞效果完美。
我试图将力度设置为零,但是我再也无法移动角色了。 希望有人可以帮助我。预先感谢
def update(self): self.animate() self.x += self.velx self.y += self.vely BATTLE.fight += round(BATTLE.fightcount * 0.9)
hit = pygame.sprite.spritecollide(PLAYER,all_sprites,False)
if hit:
if PLAYER.x >= b.rect.x:
PLAYER.x = b.rect.x - 17
elif PLAYER.x <= b.rect.x:
PLAYER.x = b.rect.x + 15
elif PLAYER.y <= b.rect.y:
PLAYER.y = b.rect.y +10
elif PLAYER.y >= b.rect.y:
PLAYER.y = b.rect.y -10
for event in pygame.event.get(): if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE): setup_gfx.done = True sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: BATTLE.fightcount +=1 PLAYER.velx -= 1 PLAYER.current_frame += 1 if event.key == pygame.K_RIGHT: BATTLE.fightcount += 1 PLAYER.velx += 1 PLAYER.current_frame += 1 if event.key == pygame.K_UP: BATTLE.fightcount +=1 PLAYER.vely -= 1 PLAYER.current_frame += 1 if event.key == pygame.K_DOWN: BATTLE.fightcount +=1 PLAYER.vely += 1 PLAYER.current_frame += 1
答案 0 :(得分:0)
简单来说,按箭头键可以提高玩家的速度。对Other Name: Principal Name = 1999999999123456@test
的每次调用都会使播放器移动Player.update()
和Player.velx
像素。因此,将Player.vely
和velx
的速度设置为vely
足以停止玩家的移动。
0
但是,我怀疑还有另一个问题,那就是玩家精灵会在碰到的东西上“挂起”。当精灵每次移动大量像素时,这将成为一个更大的问题。在一个更新周期中,播放器没有发生碰撞,但是在下一个更新周期中,它可能在平台内(或其他位置)有5像素。碰撞时会发生什么-速度降低到零,但玩家“卡在”物体上。
解决此问题的方法是使用最后“步”的数量/方向(在这种情况下为class Player( pygame.sprite.Sprite ):
...
def stop( self ):
self.velx = 0
self.vely = 0
像素),并使用它使玩家停在 edge 的位置障碍,而不是重叠。
答案 1 :(得分:0)
我终于修复了它,并且效果很好。所以这是合适的代码。
“”“
hit = pygame.sprite.spritecollide(PLAYER, all_sprites, False)
for collision in hit:
if PLAYER.velx > 0:
PLAYER.velx = 0
PLAYER.x -= 10
elif PLAYER.velx < 0:
PLAYER.velx = 0
PLAYER.x += 10
for collision in hit:
if PLAYER.vely > 0:
PLAYER.vely = 0
PLAYER.y -= 10
elif PLAYER.vely < 0:
PLAYER.vely = 0
PLAYER.y += 10
“”“