TL; DR:我想找到一种对物体施加脉冲的方法,以使该物体的速度与场景大小成正比。

我目前正在开发一款SpriteKit游戏,该游戏可以在许多不同的屏幕尺寸上使用,当我在非我开发的设备上启动游戏时,我的场景将自身调整为与 View (scene.scaleMode = .ResizeFill)相同的大小。它,我注意到:

  • 节点的大小太小
  • 对象的速度太低(我给对象加速的方法是在它们的物理体上调用applyImpulse(:_))。

  • 我想我通过一个简单的比例操作解决了尺寸问题:我查看了具有正确对象尺寸的场景的objectArea/sceneArea比,然后,我没有给对象固定尺寸,而是给它们提供了尺寸,以便不管场景区域如何,比率始终是相同的。

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

    我终于发现这是由于屏幕尺寸不同,因此,即使以相同的速度移动,一个对象在大屏幕上的移动速度似乎也会变慢。

    我的问题是我不知道如何精确调整脉冲的强度,以使其在不同的场景大小之间保持一致,我目前的方法是:
    force = sqrt(area) * k
    

    在k也是比例系数的情况下,我无法在该区域上进行比例处理,否则,速度将成倍增长(因此,我使用该区域的平方根进行了计算)。

    虽然这种方法有效,但我只是凭直觉找到了这种计算方法。虽然我知道对象区域与场景大小正确成比例,但我真的不知道速度是否可以视为在所有屏幕大小上都相等

    您知道我该怎么做才能确保所有设备上的速度始终相等吗?

    最佳答案

    不要做

    改变设备屏幕的物理世界是错误的

    物理世界在图形表示方面绝对是不可知。绝对地,无论屏幕如何,它都应具有相同的属性(大小,质量,距离等)。

    我了解您不希望当游戏在iPad Pro而不是iPhone 5上运行时,场景会比屏幕小,但是您需要以另一种方式解决此问题。

    建议您尝试其他scaleMode,例如aspectFill(如果使用的是Xcode 7,请大写:AspectFill)。这样,场景将被缩放,您所有的 Sprite 将显得更大。

    换个角度来看

    10-08 14:38