还有一个问题,刚体居然被轻易穿透,连点阻碍都没有……
–好吧,这个问题解决了,原因是下面PEShapeCache_X3_0的代码中,有一句:body->setPositionOffset(bd->anchorPoint); ,这里的anchorPoint就是plist里面设置的0.5,0.5那个玩意,但是我没弄明白为什么作者在这里要做这个操作,于是乎呢,我就把它注释掉了,然后出来的效果就正常了。
PhysicsBody *PEShapeCache::getPhysicsBodyByName(const std::string name)
{
BodyDef *bd = bodyDefs.at(name);
CCASSERT(bd != nullptr, "Body not found");
PhysicsBody *body = PhysicsBody::create(bd->mass, bd->momentum);
//body->setPositionOffset(bd->anchorPoint); //就是这个,我不知道PEShapeCache_X3_0这么做的目的是什么(哪位大神要是知道请告知)
for (auto fd : bd->fixtures)
{
if (fd->fixtureType == SHAPE_CIRCLE)
{
auto shape = PhysicsShapeCircle::create(fd->radius, PhysicsMaterial(0.0f, fd->elasticity, fd->friction), fd->center);
shape->setGroup(fd->group);
// shape->setCategoryBitmask(fd->collisionType);
body->addShape(shape);
}
else if (fd->fixtureType == SHAPE_POLYGON)
{
for (auto polygon : fd->polygons)
{
auto shape = PhysicsShapePolygon::create(polygon->vertices, polygon->numVertices, PhysicsMaterial(0.0f, fd->elasticity, fd->friction), fd->center);
shape->setGroup(fd->group);
// shape->setCategoryBitmask(fd->collisionType);
body->addShape(shape);
}
}
}
return body;
}
```
这就是注释掉那句代码之后、并且在plist里面设置原点为(0.5,0.5)的时候的效果,创建的多边形刚体可以和sprite的图片完全契合。
这个是注释掉那句代码之前、并且在plist里面设置的原点为(0.5,0.5)的时候的效果,总是出现在左下角,无论sprite的位置怎么设置都不会改变
这个是注释掉那句代码之前、并且在plist里面设置的原点为(0,0)的时候的效果,虽然可以随sprite的位置变化,但是和sprite的图片不能契合
另外说一下,我用的版本是3.4,而PEShapeCache_X3_0的作者写这个时候,应该是针对3.0版本的,所以我用这个时候,我还把3.0版本Physics目录下的chipmunk文件夹和下面的类统统拷贝到我的classes下,有改了里面的一堆引用路径,然后才能用的。
3.4版本下有一个PhysicsBody::createPolygon也可以创建多边形刚体,但是我不知道是否有方法可以直接使用PhysicsEditor导出的plist文件,哪位大神要是知道,也请告知一下。