SpriteKit:在各种设备上保持一致的大小和速度

时间:2016-08-29 21:57:55

标签: swift math sprite-kit

TL; DR:我想找到一种给物体提供冲动的方法,这样物体的速度就与场景大小成正比。

我正在构建一个SpriteKit游戏,该游戏可以在许多不同的屏幕尺寸上使用,当我在其他设备上启动游戏时,我的场景调整自身大小与其视图(scene.scaleMode = .ResizeFill)的大小相同比我开发它的那个,我注意到了:

  • 节点的大小太小

  • 物体的速度太低(我给物体加速的方式是在物理体上调用applyImpulse(:_))。

我认为我通过简单的比例操作修正了尺寸问题:我查看了具有正确对象大小的场景的objectArea / sceneArea比率,而不是给我的对象提供固定尺寸,我只是给它们尺寸因此,无论场景区域如何,比率始终相同。

对于物体速度,它更棘手......
我首先想到的是,由于物体本身较大,物理体质较高,但由于我直接通过质量属性将物质归结为物体,因此无论物体的大小如何,物体都具有完全相同的质量。

我终于弄清楚这只是因为屏幕尺寸不同,因此,即使以相同的速度移动,对象也会在更大的屏幕上移动得更慢。

我的问题是我不确切地知道如何调整我的冲动强度以使其在不同的场景大小中保持一致,我目前的方法就是这样:

force = sqrt(area) * k

当k也是比例系数时,我不能在该区域上做比例,否则,速度会呈指数增长(所以我用区域的平方根代替)。

虽然这种方法有效,但我才发现这种用直觉计算它的方法。虽然我知道物体区域与场景大小正确成比例,但我无法确切知道所有屏幕尺寸的速度是否相等

您知道我应该做些什么来确保速度在所有设备上始终相同吗?

1 个答案:

答案 0 :(得分:5)

不要这样做

更改与设备屏幕相关的物理世界错误

物理世界应该绝对不可知关于其图形表示。并且最终它应该具有相同的属性(大小,质量,距离......),无论屏幕如何。

我知道当游戏在iPad Pro而不是iPhone 5上运行时,你不希望场景变小,但你需要以另一种方式解决这个问题。

我建议你尝试另一个scaleMode,例如aspectFill(如果您使用的是Xcode 7:AspectFill)。这样场景就会变焦,所有的精灵都会显得更大。

另一种观点

  

在下面的评论中, @ Knight0fDragon 指出了一些场景,你可能真的想根据用户界面制作物理世界的一些属性。我建议读者回答下面的评论,以便与我的观点不同。