【问题标题】:Enemy stops moving when player is not colliding anymore当玩家不再碰撞时,敌人停止移动
【发布时间】:2021-05-10 23:23:23
【问题描述】:

VIDEO

我有 2 个矩形,当老鼠到达矩形的任一侧时,它会左右移动,它会等待 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"

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

【问题讨论】:

  • 请不要将您的问题编辑为一个全新的问题。
  • 另外,您目前已经提出了 127 个问题,这需要很多人花费大量时间来帮助您。为了方便帮助您的人,请通读How to Ask 和minimal reproducible example。制作minimal reproducible example 特别有用,因为它可以更容易地给出好的和准确的答案。
  • 我正在尽力提问,如果我搞砸了,请见谅

标签: python pygame


【解决方案1】:

很难遵循你的逻辑,但似乎你需要一个额外的条件。如果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"

【讨论】:

  • 是的,没错,但是如果玩家在 move 或 move2 旁边移动不会导致故障,或者有什么方法可以在敌人攻击玩家时禁用它们
  • @HabibIsmail 对不起,我不知道你在做什么。你有没有试过代码。代码刚刚生效if not move and not move2
  • VIDEO 好的,我尝试并测试了它我不知道为什么,但有时当我向下移动并远离大鼠直肠时,它只是停止了它的工作,但同时它没有它我有更新了我的问题
  • @HabibIsmail 你已经改变了你的问题。现在我的回答没用了。
  • nvm 修复了它很抱歉
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
相关资源
最近更新 更多