现在我使用的是rigidbody2d制作子弹然后通过apply_impulse给子弹施加冲量推动他(因为直接用move_and_collide函数会导致_on_body_entered在某些时候失效具体原因不明,然后我想尝试使用rigidbody2d实现子弹效果而不是area2d也是因为rigidbody2d更适合做物理碰撞的交互,我希望子弹能够反弹也能够推动击退敌人)接着按道理说characterbody2d是不会受到物理影响的(官方说明书里写的)然后我在使用characterbody2d节点的怪物中的_physics_process函数中使用move_and_collide函数后,被子弹击中的怪物会被子弹击退,在不使用move_and_collide函数后又不会被子弹击退。综上我一共有两个问题
一 子弹,怪物这些适合什么样的节点,尤其是子弹需要实现穿透反弹击退,怪物需要实现复杂移动,追踪,冲刺等物理效果时
二 为什么本应该不会受到物理影响的characterbody2d节点却受到了子弹施加的冲量这背后的原因是什么呢@人类的大敌

一 子弹,怪物这些适合什么样的节点,尤其是子弹需要实现穿透反弹击退,怪物需要实现复杂移动,追踪,冲刺等物理效果时
二 为什么本应该不会受到物理影响的characterbody2d节点却受到了子弹施加的冲量这背后的原因是什么呢@人类的大敌


使用物理节点的理由,只有可能是为了调用内置的碰撞检测方法(以节省重复造轮子的时间)但实际上,碰撞检测是可以自己实现的……也就是程序开发领域常说的“重复造轮子”,面对拥有更复杂需求的项目(例如有更具体的自主调整细节的需求)需要面临自己实现各项功能的情况的概率就越多。
二、CharacterBody2D在文档里描述的“不会受到物理影响”其实是官方文档的问题(官方文档的描述不完整)更加近似的描述是:在不使用move_and_slide()以及在使用move_and_collide()时第二项参数为true的情况下,才不会受到物理影响。如上面的截图图所示(第一张截图实际上展示了官方文档的前后矛盾,因为1楼提到的“不受物理影响”这个描述就出自这部分的文档,结果下面就又写个“会受对方运动的影响”,官方文档出现这样的问题确实会导致一些困惑)