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 将显得更大。
换个角度来看