我的测试环境:如何检测由PhyicsEditor在Cocos2d-x中创建的box2d灯具内的触摸?
的Xcode 4.6,新的cocos2d-x + Box2D的项目 的cocos2d-2.1beta3-X-2.1.1 PhysicsEditor 1.0.10
我修改HelloWorldScene of PhysicsEditor cocos2dx demo一点,使其更简单,下面是我的一些代码:
initPhysics
gravity.Set(0.0F,0.0F);
因此,精灵不会移动。
替换源代码内ccTouchesEnded到:
CCTouch * pTouch =(CCTouch *)touches-> anyObject(); CCPoint location = pTouch-> locationInView(pTouch-> view());
CCPoint convLoc = CCDirector :: sharedDirector() - > convertToGL(location);
b2Vec2 v = b2Vec2(convLoc.x/PTM_RATIO,convLoc.y/PTM_RATIO);
为(b2Body * B =世界 - > GetBodyList(); B; B = B>的GetNext()){
b2Fixture *f = b->GetFixtureList(); // get the first fixture CCSprite *sprite =(CCSprite *) b->GetUserData(); if(sprite != NULL) { if(f -> TestPoint(v)) { CCLog("You touched a body %d",sprite->getTag()); } }
}
的问题是,测试点只在非常小的区域(不是整个形状区域)返回true。
下面是截图:
任何人都可以建议我如何调试这个问题?由于
更新:显示来自PhysicsEditor
感谢您的回复。我认为在我的情况下,一个身体只有一个固定装置,所以我只拿到第一个固定装置。 (我实际上做了一些测试,比如你的建议,我会再试一次。) “Box2d每个灯具只允许8个顶点”,这是否意味着我最多可以在PhysicsEditor中为我的精灵添加8个顶点? 谢谢 – 2013-03-15 09:50:59
顺便说一下,我添加了PhysicsEditor生成的数据截图。它显示一个精灵只有一个固定装置(例如,热狗)。但是有多个多边形数组。夹具肯定有8个以上的顶点。 – 2013-03-15 09:56:35
我发现PhysicsEditor自动创建多个灯具。但是一个灯具内有多个多边形。这些多边形的顶点总数将超过8个。但它仍然适用于您的方法。 (我需要在CCLog后添加一个中断。)无论如何,我会在我的真实应用程序cocos2d-x 2.0中测试这个。我会让你知道结果。谢谢 – 2013-03-15 10:15:54