Cocos2d iphone cocos2d box2d风扇-影响精灵而不发生碰撞

Cocos2d iphone cocos2d box2d风扇-影响精灵而不发生碰撞,cocos2d-iphone,box2d,collision-detection,Cocos2d Iphone,Box2d,Collision Detection,我正在cocos2d/box2d中制作一个游戏,一切都很好,移动精灵,碰撞等等 我想添加一些影响我移动的精灵的元素,而不让精灵碰到它们,也不知道怎么做 我的精灵可以与物体碰撞,我可以做到这一点没有问题,但我正在寻找一个不会发生碰撞而影响精灵的物体,例如一个风扇,它会吹风,将精灵推开,或者一个磁铁类型的设备,它会吸引我的精灵 如果我的精灵与这些对象发生碰撞,那么它应该记录碰撞并死亡,但是如果它只是靠近这些对象移动,那么它应该被吸引或排斥 有什么想法吗?你可以在任何时候对物体施加力(如F=ma)使其

我正在cocos2d/box2d中制作一个游戏,一切都很好,移动精灵,碰撞等等

我想添加一些影响我移动的精灵的元素,而不让精灵碰到它们,也不知道怎么做

我的精灵可以与物体碰撞,我可以做到这一点没有问题,但我正在寻找一个不会发生碰撞而影响精灵的物体,例如一个风扇,它会吹风,将精灵推开,或者一个磁铁类型的设备,它会吸引我的精灵

如果我的精灵与这些对象发生碰撞,那么它应该记录碰撞并死亡,但是如果它只是靠近这些对象移动,那么它应该被吸引或排斥

有什么想法吗?

你可以在任何时候对物体施加力(如F=ma)使其移动

box2d中的重力一直都在这样做,如果定义了重力向量,则会使对象“落下”

因此,你的粉丝不必是一个真正的“物体”,因为它有一个身体。您可以随时使用box2d中的方法将来自风扇的力施加到您希望风扇吹向的物体上。我有一些“EntityController”的代码,它应用推力,使其朝某个方向(目标方向)移动。这是它的代码:

   void ApplyThrust()
   {
      // Get the distance to the target.
      Vec2 toTarget = GetTargetPos() - GetBody()->GetWorldCenter();
      toTarget.Normalize();
      Vec2 desiredVel = GetMaxSpeed()*toTarget;
      Vec2 currentVel = GetBody()->GetLinearVelocity();
      Vec2 thrust = desiredVel - currentVel;
      GetBody()->ApplyForceToCenter(GetMaxLinearAcceleration()*thrust);
   }
在这种情况下,身体正朝着目标移动。但它也可能很容易成为目标,即风扇吹入的方向,现在“正在吹入的物体”的质心被推离风扇

我的所有对象都有一个最大速度(GetMaximumSpeed(…),因此此函数将只应用力,直到对象以最大速度移动,然后不再应用(这是一个自然反馈循环)

欢迎您查看代码库的其余部分。它也被谈论。注意,这是在COCOS2D-X(C++)中,但是如果你将文件声明为.mm(允许C++代码),那么相同的C++代码将在COSCO2D中工作。或者只使用你认为合适的没有代码的技术


这有帮助吗?

您可以制作传感器体,该传感器体将产生接触事件,但不会产生碰撞响应,允许您对任何接触体应用固定脉冲。您可以定义区域,当您的精灵体进入该区域时,您可以改变相对于风扇或磁铁的重力。