新人,问一下如何在物理世界中实现“跳跃”

我想在物理世界中创建一个精灵,让它能跳起来,同时在空中能够通过重力感应来控制它左右移动,可以使用applyForce来实现吗

我尝试使用了JumpBy,但是在跳跃到空中的过程中是无法与其他物体发生碰撞的,请问有办法解决吗

千万别把物理跟精灵的移动搞混了。
JUMPBY只是让你的SPRITE跳起来,他所绑定的物理BODY并没有发生跳跃,这个时候BODY跟SPRITE分离了,肯定检测不到碰撞。

你可以用JUMPBY,不过要及时更改所绑定的BODY的物理世界的状态。。。

或者就用applyForce吧。。。不过记得锁定旋转,不然到时候跳下来的时候可能会跌倒。

请问applyForce要怎么使用啊?
sprite->getPhysicsBody()->applyForce(Point(0,20000)),我是这么写的,但是精灵并没有动。。。也是因为body和sprite分离的原因吗??

原来你使用的是3.x起封装的physics类。那这个我得好好讲讲 。

3.x之前的物理引擎是与cocos分开的,即互不相关,body归body,sprite归sprite,body任何状态的改变,并不会影响sprite,反之亦然。要把两者联合起来,需要手动在每一帧里改变sprite的相对位置。

而3.x封装了物理引擎后,一切就方便多了,sprte与body可以无缝绑定在一起。sprite的位置的改变,也会引起body的改变,反之亦然,而sprite的action也是可以改变body的,Jumpby 跟moveTo都是可以改变的。你实现不了,应该检查下哪里出错了。

至于你说的applyForce每反应,是这样的。
applyFroce()与applyImup()等是一个瞬间量,即使用后一瞬间有效果。就像对物体施力,施力
瞬间有效果,要一直有效果,需要持续施力。
这点chimunk与box2d有所不同。chimunk要想有持续有效果,必须一直对物体applyFroce,即把applyForce放到Update里。而BOX2D一applyForce就立刻对物体有
施加力。但过后力气立刻消失,当然,速度也发生了改变。这点,box2d比chhimunk真实多了。

所以正确的使用应该是setVelocity,这个一使用立刻改变body的速度。

对于新手,建议打开debugdraw,这样你可以实时看到你的body与sprite的状况。。。
// set debugdraw 初始化物理引擎后加入这行代码
m_world->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);

哦,原来是这样,真是太感谢了,我就说为什么死都动不了。
我再问下3.x怎么锁定物体旋转啊,我用组合的方式拼出来的多边形连站都站不稳。。。

就像这样…

->setRotationEnable(false);
禁止旋转。很多功能你可以查看这个类的方法。看字面意思就懂这个函数的作用了。

还有你上面那个不是站不稳,是出现BUG了。。。
这个系统封装的chipmunk引擎BUG有点多。先凑合使用。。。以后你熟悉了换BOX2D。

果然是只能去学学box2d了啊,chipmunk创建多边形刚体好麻烦,我看见用box2d的教程可以直接读取.plist文件来创建,方便到不行

大神问下,我需要让小人触屏跳跃,如何判断小人没有踩到实体?
这样的话我小人在空中的时候我就可以屏蔽触屏事件,防止二次起跳