1

我有 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 来实现碰撞,但似乎我正在考虑自己做物理的工作量很大:(

4

1 回答 1

1

首先,我不确定,但你为什么在这里除以 PTM_Ratios,我认为你需要那个,可能是你正在以其他方式处理它。

其次,10x10 比 50x50 移动得更快,因为您正在设置 SetMassFromShapes,因此假设您正在为 50x50 精灵创建一个 50/PTM_RATIOSx50/PTM_RATIO 主体,该主体的质量大于 10x10 主体。所以它走得很慢。

第三,你正在使用距离作为脉冲,所以你肯定不会标准化你会得到一个与你的距离成比例的脉冲

对于 Hackish 解决方案,如果没有其他方法对您有用,只需降低 PTM_RATIO!

于 2010-10-25T21:48:34.150 回答