当玩家不再碰撞时敌人停止移动

时间:2021-02-07 00:02:02

标签: python pygame

VIDEO

当老鼠到达 rect 的任一侧时,我有 2 个 rects 左右移动,它等待 100 秒然后开始移动到另一侧。 我的问题是如果我的玩家与右侧碰撞,我有 2 个碰撞盒,敌人会向右移动并攻击玩家,如果它向左侧移动,它会移动到左侧并攻击玩家播放器,但正如您在下面的视频中看到的那样,如果我没有与老鼠碰撞箱发生碰撞,它就会停止移动。我希望它继续左右移动并等待 100 秒。

VIDEO

这就是老鼠的运动方式

if move:
    if move_timer < 200:
        move_timer += 1
    else:
        rat1.direction = "move2"
        rat1.x += 1


if move2:
    if move_timer2 < 200:
        move_timer2 += 1
    else:
        rat1.direction = "move"
        rat1.x -= 1

        
if rat1.rect.colliderect(rat11.rect):
    rat1.direction = "idle"
    move = True
    move2 = False
    move_timer2 = 0

    
elif rat1.rect.colliderect(rat22.rect):
    rat1.direction = "id"
    move = False
    move2 = True

    move_timer = 0

如果玩家与右侧或左侧碰撞箱发生碰撞,它应该将老鼠敌人移动到玩家所在的方向,有时当敌人向玩家移动时,我们击中了左右移动老鼠的矩形,它会导致方向出现故障,它不会移动。

elif playerman.rect.colliderect(rat1.hitbox):
    rat1.x += 3
    rat1.direction = "move2"

elif playerman.rect.colliderect(rat1.hitbox2):
    rat1.x -= 3
    rat1.direction = "move"

在这里我做了它,如果老鼠与玩家碰撞箱碰撞,那么它应该播放攻击动画 move 并且 move2 应该是假的,因为我们不希望敌人左右移动现在它应该坚持攻击玩家。

if rat1.direction == "move2":
    if playerman.rect.colliderect(rat1.rect):
        move = False
        move2 = False
        rat1.direction = "at"
        

if rat1.direction == "move":
    if playerman.rect.colliderect(rat1.rect):
        move = False
        move2 = False
        rat1.direction = "att"

我不确定我是否很好地解释了我的问题,但我想说的是,如果玩家没有与会移动老鼠的碰撞箱发生碰撞,如何让我的老鼠继续朝着它一直移动的方向移动更接近玩家敌人,当敌人的老鼠攻击玩家时,我如何停止左右移动我的老鼠的矩形。

1 个答案:

答案 0 :(得分:1)

很难跟上你的逻辑,但似乎你需要一个额外的条件。如果 movemove2 都没有设置并且老鼠没有与玩家发生碰撞,老鼠必须保持移动:

if not move and not move2:
    if not playerman.rect.colliderect(rat1.rect):
    
        if rat1.direction == "at":
            move = True
            move2 = False
            move_timer = 200
            rat1.direction = "move"
        elif rat1.direction == "att":
            move = False
            move2 = True
            move_timer2 = 200
            rat1.direction = "move2"