我有自上而下的iPhone游戏(无重力),我正在使用Cocos2d和Box2d。
我尝试通过此代码移动子弹:
// 'targetPosition' is a point of touch
b2Vec2 touchInWorld = b2Vec2(targetPosition.x/PTM_RATIO, targetPosition.y/PTM_RATIO);
b2Vec2 direction = b2Vec2(touchInWorld.x - ballBodyDef.position.x, touchInWorld.y - ballBodyDef.position.y);
b2Vec2 force = b2Vec2(direction.x, direction.y);
force.Normalize();
ballBody->ApplyLinearImpulse(force, ballBodyDef.position);
问题是如果精灵很小(10x10像素),球会快速移动到快速。
如果精灵是50x50,那么速度会更小并且看起来没问题。
这让我发疯,因为我根本无法控制速度。
不仅如此,如果我不施加force.Normalize(),速度会根据触摸的方向而有所不同......
当我使用Cocos2d和动画时,一切都很好用。我尝试使用Box2d来实现碰撞,但是我正在考虑自己做物理,这似乎是一项巨大的努力:(
答案 0 :(得分:1)
首先,我不确定,但为什么你在这里划分PTM_Ratios,我认为你不需要那样,也许你正在以其他方式处理它。
其次,10x10比50x50快,因为你设置了SetMassFromShapes,所以假设你为50x50精灵创建了50 / PTM_RATIOSx50 / PTM_RATIO体,那么身体的质量大于10x10体。所以行程缓慢。
第三,你正在使用距离冲动这么肯定你不会规范化你会得到一个比例冲动到你的距离
对于Hackish Solution,如果没有其他任何可行的方法,只需减少PTM_RATIO!