python - 当玩家不再碰撞时,敌人停止移动
问题描述
我有 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"
我不确定我是否很好地解释了我的问题,但我想说的是,如果玩家没有与将老鼠移向玩家的碰撞箱发生碰撞,如何让我的老鼠继续移动它一直移动的方向敌人更多,当敌人的老鼠攻击玩家时,我怎样才能阻止左右移动我的老鼠的矩形。
解决方案
很难遵循您的逻辑,但似乎您需要一个附加条件。如果既没有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"
推荐阅读
- javascript - 点击类实例总是影响第一个,而不是点击的
- node.js - 如何在 NodeJS 的 MongoDB 中将 String 类型的 DateTime 字符串存储为 ISO DateTime 格式?
- r - 交互式图表不适用于以下闪亮代码,无法可视化选定的公司 例如:苹果和微软
- json - 在 Ajax Post Coldfusion 之后显示来自 cfc 的警报
- javascript - 如何使用 javasript 在同一页面上重定向?
- html - 悬停时如何在输入底部生效?
- sql - 如何旋转表 - Postgresql
- java - 根据一些值过滤列表,然后再次过滤第一个输出的结果
- python - 在过程 i while 循环之后添加增量有什么区别
- reactjs - 无法修复自动完成中的 popper 放置