当老鼠到达 rect 的任一侧时,我有 2 个 rects 左右移动,它等待 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"
我不确定我是否很好地解释了我的问题,但我想说的是,如果玩家没有与会移动老鼠的碰撞箱发生碰撞,如何让我的老鼠继续朝着它一直移动的方向移动更接近玩家敌人,当敌人的老鼠攻击玩家时,我如何停止左右移动我的老鼠的矩形。
答案 0 :(得分: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"