cocos2d-x3.0 Physics物理引擎的问题

我最近是用3.0写了一个跑酷类游戏,我给主角设置了圆形的刚体代码如下:
auto body_player = PhysicsBody::createCircle(player->getContentSize().width / 4);
body_player->setContactTestBitmask(0x01);

body_player->setRotationEnable(false); //设置是否旋转
Sprite player->setPhysicsBody(body_player);
//从刚体中获得shape,并修改材质反弹力为0
Vector<PhysicsShape
> physicShape = body_player->getShapes();
for(int i=0; i<physicShape.size();i++){
physicShape.at(i)->setDensity(0); //密度
physicShape.at(i)->setRestitution(0); //反弹力
physicShape.at(i)->setFriction(1000);
}

并在屏幕底面设置边线
auto body = PhysicsBody::createEdgeSegment(Point(x,0),Point(x1,0),PHYSICSBODY_MATERIAL_DEFAULT, 3);
auto edgeNode = Node::create();
edgeNode->setPosition(Point(0,y));
edgeNode->setAnchorPoint(Point::ANCHOR_MIDDLE);

body->setContactTestBitmask(1);
edgeNode->setPhysicsBody(body);
this->addChild(edgeNode);

我使用动画的方式,使player向上跳动,MoveBy::create(0.6,Point(0, 260));但是落地面边线做碰撞时,有时会莫名其妙的别反弹回来。因为之前我设置过了反弹力为0,现在偶尔会被反弹回来,知不道愿意,请大侠来帮忙,非常感谢了

你有没有把地面的弹力也设为0?估计是地面把它弹上去的~

我也是这么想的,我也尝试过,把底面的也设置为0,结果还是不行,我都打算用射线去实现了,现在真纠结

你做背景移动的时候,带刚体的sprite移动了吗,我这里没移动,请问你用的cocos2d-x 3.x的哪个版本

我在用3.0RC,发有相同的问题存在

layer->m_world->setGravity(ccp(0,0));

这个问题竟然到3.3都还有:10::10::10::10::10: ,设置了地面与刚体都为0,还是会出现刚体下坠超过地面,然后反弹回

和我一样,也是弹力为零,却突然弹起来,而且每次静止在地面之后,锁屏再解锁,刚体就飞了,上次问这个问题,没人理。

:6:还有个更扯的问题,官方demo在6.1ios模拟器下运行,刚体一直是在地面跳动

cocos2d-x里面物理默认用的是chipmunk引擎,当然我没有用过chipmunk,没有什么发言权,不过我在用box2d的时候,发现一个有趣的现象,box2d的对于一些极限的模拟会产生严重的误差,并且均发生在尺寸很小的时候,比如一个小球,半径小于0.1mm的时候,放在一个水平面上,就能够看到模拟出现的误差——不停的跳动。因此,我的建议是,不要在游戏中用box2d模拟尺寸差距巨大的物体,只有在差距不大的情况下,使用box2d将像素和米进行转换,使得box2d总是维持在表现良好的模拟水平,这样渲染才能看起来很舒服。另外box2d对于速度的模拟是有限制的,好像是200m/s。chipmunk不知道是怎么样的,希望对你们有帮助。
如果chipmunk对模拟也有误差和限制,那么就得吐槽一下Node的设计者了,本来渲染节点和缸体就不是一个东西,一定要绑到一起,干什么呢,看看Node里面对物理的操作,直接把像素传到刚体中,也没有单位转换,这不是胡闹吗。

这个问题也遇到了,没有官方出来解决下吗?完全不能用啊

帧率是不是不稳定,会出现球上下跳

恩,感觉像帧率不稳定,造成的,我降低帧率 这种情况会减轻

up
问下这个问题有没有解决?

官方自己在文档里说了,BOX2D的最佳模拟是0.1m到10m之间。太大或太小都会产生较大的误差。chipmunk就更不用说了,误差更严重。

这个官方封装的引擎各种BUG,各种效率低。一开始图方便使用它,到后来觉得实在是没法跟纯用BOX2D比。。。
我劝各位还是多打几行代码,辛苦点,用原生的BOX2D吧。
这个封装的chipmunk BUG实在太多。

建议不要使用MoveBy,直接对刚体使用setVelocity方法进行跳跃动作。

难道这个bug一直没有解决吗

楼主的问题 可能是 幽灵顶点造成的吧,就是不是 猪脚的 下面跟 地板 的上面碰撞 反弹,而是 猪脚的 右下角 跟 地板的 左上边角 碰撞,我自己是地板不使用 矩形刚体,改成 线段刚体 可以节省很多麻烦。

应该不是。我碰到的情况就是主角的下边与桌面的上边碰撞。主角这时候在x方向上完全被地板覆盖,就是说主角是整个下边界都在地板范围内。不是主角右下角碰地板左上角。
感觉像是因为两个碰撞体有重叠部分(主角从高空落向地板会发生碰撞体的重叠渗透)后,chipmunk引擎会对主角产生一个向上的impulse导致的。一般情况下产生重叠渗透后主角会被慢慢推出地板(即不重叠),但是偶尔的可能因为计算出来的impulse过大导致主角出现奇怪的向上弹跳现象。