我尝试着执行一个杀戮功能,即玩家可以跳到敌人的上方而敌人将会死亡,我首先计算了玩家和敌人的y坐标。然后使用if语句检查玩家的y坐标和敌人的y坐标,然后让玩家死亡。但问题是,当它跑向玩家时,它也会使敌人死亡。
下面是我的示例代码:if collision.collider.is_in_group('enemy'):
var player_feet = (position + $CollisionShape2D.shape.extents).y
print(player_feet)
if player_feet < collision.collider.position.y:
print(player_feet)
print(collision.collider.position.y)
collision.collider.take_damage()
velocity.y = -200
else:
hurt()
这是我的玩家和敌人精灵的位置
- 玩家的精灵位置
- 敌人精灵位置
是否有其他方法来解决这个问题,或者我应该在我的代码中改变什么?
检查垂直速度velocity.y
。如果玩家向下移动velocity.y > 0
,那么它可能会落在敌人身上。否则不。
实际上,由于舍入误差,您可能希望使用阈值velocity.y > 0.01
。s
另一种方法可以是放置KinematicBody2D
的Area2D
(或RayCast2D
)子,并使用它来找出玩家站在什么上面。