iOS Spritekit 和 Android Andengine 之间的物理标准化

Posted

技术标签:

【中文标题】iOS Spritekit 和 Android Andengine 之间的物理标准化【英文标题】:Physics standardisation between iOS Spritekit and Android Andengine 【发布时间】:2014-10-17 14:18:41 【问题描述】:

我正在同时在 ios Sprite Kit 和 AndEngine(使用 Box2d)上开发游戏。我希望两个平台上的游戏物理特性相同。 Sprite Kit 在内部使用 Box2d 进行物理模拟,与 AndEngine 中相同。

在 AndEngine 的 Box2d 中,我使用 body.SetLinearVelocity(x,y) 其中 x = y = density/34f(某个常数值)

在 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 中,我给出的速度取决于设备的密度,以便我们可以使游戏在所有 android 设备上看起来都一样,例如球在所有设备(手机、平板电脑)中几乎同时开始和结束

我想知道在精灵套件 w.r.t AndEngine 中要赋予什么价值,以便两个平台中的物理看起来相似。此外,我们是否必须为不同的屏幕尺寸(如 AndEngine)提供不同的速度,或者应该为所有 iOS 设备提供相同的速度。

除了设置速度之外,我还需要知道是否应该根据屏幕尺寸保留 Gravity、Impulse 变量。

【问题讨论】:

我同意 Steffen 的观点。由于 SpriteKit 是闭源的,你甚至不知道他们是如何修改 Box2D 的,更不用说自己修改了。甚至 AndEngine 也是 Box2D 对不同语言的移植,这通常会引入一些差异。如果您真的想跨平台进行标准化,我建议您使用 cocos2d-x 之类的东西,您可以在其中为 iOS 和 Android 使用完全相同的源代码。 【参考方案1】:

两个不同的游戏引擎、两个不同版本的 Box2D(对 Sprite Kit 版本进行了未知修改)、两个不同的设备平台、两种不同的编程语言,甚至可能是两套不同的硬件(iOS 与 Android )?这几乎是不可能的。

您必须首先在 Sprite Kit 和 AndEngine 中运行完全相同版本的 Box2D。由于您无法知道 SK 开发人员对 Box2D 进行的内部修改。还有一些。

然后您需要确保使用相同的构建设置编译代码,特别是与浮点运算相关的代码。

【讨论】:

以上是关于iOS Spritekit 和 Android Andengine 之间的物理标准化的主要内容,如果未能解决你的问题,请参考以下文章

iOS8 Spritekit 滞后

如何在 iOS7 中使用 SpriteKit 添加粒子

SpriteKit 自动恢复和自动暂停 iOS8

iOS 混合 Spritekit 和 UIKit

使用 SpriteKit 和 iOS 7 保存高分

SpriteKit + iOS8。 SpriteKit 是不是支持“烘焙”渲染结果?