我同时在 iOS Sprite Kit 和 AndEngine(使用 Box2d)上开发游戏。我希望游戏的物理特性在两个平台上都相同。 Sprite Kit 在内部使用 Box2d 进行与 AndEngine 相同的物理模拟。
在 AndEngine 的 Box2d 中,我使用 body.SetLinearVelocity(x,y)
其中 x = y = density/34f(some constant value)
在 Sprite Kit 中,我使用 ball.physicsBody.velocity = CGVectorMake(x,y)
我同样在 AndEngine 和 Sprite Kit 中分别使用下面的代码来处理重力和冲量。
对于重力:
在AndEngine的Box2d中,我使用
mPhysicsWorld = new FixedStepPhysicsWorld(60, 1, new Vector2(0, -1f),false, 6, 2);
在 Sprite Kit 中,我使用
self.physicsWorld.gravity = CGVectorMake(0, -1);
对于冲动:
在AndEngine的Box2d中,我使用
body.applyLinearImpulse(new Vector2(2f, 2f),new Vector2(body.getWorldCenter().x, body.getWorldCenter().y));
在 Sprite Kit 中,我使用
[ball.physicsBody applyImpulse:CGVectorMake(2,2)];
在 AndEngine 中,我给出了速度 w.r.t 设备的密度,这样我们就可以让游戏在所有安卓设备上看起来都一样,就像球在所有设备(手机、平板电脑)中几乎同时开始和结束
我想知道在 sprite kit w.r.t AndEngine 中应该赋予什么值,以便两个平台中的物理效果看起来相似。此外,我们是否必须像在 AndEngine 中那样为不同的屏幕尺寸提供不同的速度,或者应该为所有 iOS 设备提供相同的速度。
除了设置速度外,我还需要知道是否应该根据屏幕尺寸保持 Gravity 和 Impulse 变量。
最佳答案
两个不同的游戏引擎、两个不同版本的 Box2D(对 Sprite Kit 版本进行了未知的修改)、两个不同的设备平台、两种不同的编程语言,甚至可能是两组不同的硬件(iOS 与 Android)之间的物理相同)?这几乎是不可能的。
一开始,您必须在 Sprite Kit 和 AndEngine 中运行完全相同版本的 Box2D。因为您无法知道 SK 开发人员对 Box2D 进行的内部修改。还有一些。
然后您需要确保使用相同的build设置编译代码,特别是因为它与浮点运算有关。
关于ios - iOS Spritekit 和 Android Andengine 之间的物理标准化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26427069/