如何在 SpriteKit 中的不同设备上使 SKSpriteNode 的速度相同?

Posted

技术标签:

【中文标题】如何在 SpriteKit 中的不同设备上使 SKSpriteNode 的速度相同?【英文标题】:How can I make an SKSpriteNode's velocity the same across different devices in SpriteKit? 【发布时间】:2018-08-08 02:40:19 【问题描述】:

我的场景大小是 view.bounds.size

我有一个大小为 CGSize(width: frame.size.width/25, height: frame.size.width/25)的球

最初,我在 CGVector (dx: 25, dy: 25) 处获得球速,但在较小的设备 (SE) 上球的速度更快,而在较大的设备 (8 Plus) 上球的速度较慢,这是有道理的。所以我将球的 x 和 y 速度更改为 frame.size.width * 0.067,在 iPhone 7 上达到 25,这是我喜欢的速度。不幸的是,球在不同的设备上仍然以不同的速度移动。然后,我认为这一定是球的质量不同,因为球的大小是框架宽度的百分比。所以我将质量设置为常数,但球仍然以不同的速度移动 所以现在我不知道发生了什么。

有什么想法吗?

【问题讨论】:

【参考方案1】:

我认为您可以对场景(游戏区域)使用恒定大小,并将该恒定大小渲染到任何屏幕上进行一些转换。因此,您的应用程序的所有逻辑都将在任何设备上以恒定大小进行交互。 如果屏幕有其他比例,可以在屏幕边缘附近添加装饰元素。

【讨论】:

是的,这是首选方式。您的场景应该始终以恒定大小开始,如果您在需要像素完美图形的游戏中,您应该使用.resize scaleMode 来调整它 我不同意的一点是“装饰元素”,从用户体验的角度来看,人们不喜欢他们的观点被裁剪。实际上,让人们多看一点场景比少看一点要好。当然,这不是一个明确的规则,因为那里有一些游戏只适用于修复方面(如俄罗斯方块),而作为平台游戏(如马里奥),你想让他们有机会看到更多的天空和地面。 感谢您的帮助。我将场景大小更改为 view.bounds.size,但在 iphone 8 plus/iphone x 上移动仍然很慢,在 iphone se 上移动很快,即使速度是一个常数,场景大小也是一样的。跨度> 您确定视图在不同设备上具有相同的边界吗?我建议对场景使用一些 const 大小,例如 (640*960),并进行转换以将其渲染为屏幕视图。

以上是关于如何在 SpriteKit 中的不同设备上使 SKSpriteNode 的速度相同?的主要内容,如果未能解决你的问题,请参考以下文章

在 SpriteKit 中处理不同的 iOS 设备分辨率

在不同的设置上使 SQL Server 中的 Microsoft Access 表相同

即使调用了 removeAllChildren,SpriteKit 中的内存也会增加

如何在 vuetify 上使标题栏动态化?

无法在 SK3DNode 上方显示精灵

使用 SpriteKit 的自定义框架 - 未加载资产文件