碰撞后如何使角色停止

我的角色在击中一个精灵组后应该就停止了,但我不知道该怎么做。 碰撞效果完美。

我试图将力度设置为零,但是我再也无法移动角色了。 希望有人可以帮助我。预先感谢

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
b_bunny 回答:碰撞后如何使角色停止

简单来说,按箭头键可以提高玩家的速度。对Other Name: Principal Name = 1999999999123456@test 的每次调用都会使播放器移动Player.update()Player.velx像素。因此,将Player.velyvelx的速度设置为vely足以停止玩家的移动。

0

但是,我怀疑还有另一个问题,那就是玩家精灵会在碰到的东西上“挂起”。当精灵每次移动大量像素时,这将成为一个更大的问题。在一个更新周期中,播放器没有发生碰撞,但是在下一个更新周期中,它可能在平台内(或其他位置)有5像素。碰撞时会发生什么-速度降低到零,但玩家“卡在”物体上。

解决此问题的方法是使用最后“步”的数量/方向(在这种情况下为class Player( pygame.sprite.Sprite ): ... def stop( self ): self.velx = 0 self.vely = 0 像素),并使用它使玩家停在 edge 的位置障碍,而不是重叠。

,

我终于修复了它,并且效果很好。所以这是合适的代码。

“”“

    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

“”“

本文链接:https://www.f2er.com/3111033.html

大家都在问