首页 > 解决方案 > 当玩家不再碰撞时,敌人停止移动

问题描述

视频

我有 2 个矩形,当老鼠到达矩形的任一侧时,它会左右移动,它会等待 100 秒,然后开始移动到另一侧。我的问题是我有 2 个碰撞箱,如果我的玩家与右侧碰撞,敌人将向右移动并攻击玩家,如果它向左侧移动,它将向左侧移动并攻击玩家,但正如你所见下面的视频如果我没有与老鼠碰撞箱发生碰撞,它会停止移动。我希望它继续左右移动并等待 100 秒。

视频

老鼠是这样移动的

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"

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

标签: pythonpygame

解决方案


很难遵循您的逻辑,但似乎您需要一个附加条件。如果既没有move也没有move2设置并且老鼠没有与玩家碰撞,老鼠必须保持移动:

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"

推荐阅读