我对SpriteKit非常陌生,并且一直在网上关注一些很棒的教程。他们都做了一件我认为可能是红旗的事情,但想问社区。 p>
先决条件:他的所有演示都是使用iPad完成的(它在应用程序设置中设置为仅针对iPad,因此无意iPhone)。
所以我看到的是开发人员使用硬编码点创建标签和图形。
例如,使文本“游戏结束”出现:
let gameOver = SKSpriteNode(imageNamed: "gameOver")
gameOver.position = CGPoint(x: 512, y: 384)
gameOver.zPosition = 1
addChild(gameOver)
所以关于这段代码的事情是它在特定点上的硬编码。所以这意味着从理论上来说,iPad mini与iPad专业版有点差错,这是正确的(因为他打算将它放在iPad上)?或者设备是否每次都应该转换到哪里?
我觉得你想要做一些花哨的魔法,比如计算屏幕的宽度/高度并除以一些数来计算中心,而不是指定点。
事实上,他的所有代码或多或少都使用硬编码点,例如看看这个以渲染精灵:
for i in 0 ..< 5 { drawSpriteAt(CGPoint(x: 100 + (i * 170), y: 410)) }
for i in 0 ..< 4 { drawSpriteAt(CGPoint(x: 180 + (i * 170), y: 320)) }
for i in 0 ..< 5 { drawSpriteAt(CGPoint(x: 100 + (i * 170), y: 230)) }
如果我同时瞄准iPad mini和iPad专业版,这不是一个主要问题吗?
出于某种原因,我在iPad专业版的模拟器上运行它,它实际上看起来很不错。
所以我最终的问题是:
这样做会好吗?不同的iPad在某种程度上神奇地解决了这个问题(512,384)在iPad mini和iPad pro上的不同点吗?
如果这是一个基本问题,感谢和道歉,我只是想看看,如果我只是编写一个应用程序来定位iPhone或iPad(我实际上两个都做),我会用硬盘制作两个独立的应用程序特定于一个设备的编码坐标。
例如我说“在所有iPad上,无论如何,使用点(512,384)”,在iPhone上我会说“在所有尺寸的所有iPhone上,使用点(300,150)或类似的东西。
非常感谢你的帮助!
答案 0 :(得分:3)
Sprite Kit设计有一个缩放系统,因此您不必担心坐标。坐标不代表屏幕上的像素或点坐标 - 但是是游戏场景中的坐标。基本上,如果您为游戏设置了缩放模式,您的坐标将被用于多种屏幕尺寸。 (如果您只是在谈论iOS按钮/视图坐标,那么您的假设是正确的。)
渲染场景后,其内容将被复制到演示文稿中 视图。如果视图和场景大小相同,那么内容 可以直接复制到视图中。如果两者不同,那么 场景缩放以适合视图。 scaleMode属性确定 如何缩放内容。
当你设计你的游戏时,你应该决定一个策略 处理场景的大小和scaleMode属性。这是最多的 共同战略:
- 以恒定大小实例化场景,永远不要更改它。
- 选择一种缩放模式,让视图缩放场景的内容。这给了 场景是一个可预测的坐标系和框架。然后你可以基地 您在这个坐标系上的艺术资产和游戏逻辑。
- 调整 游戏中场景的大小。必要时,调整您的游戏 逻辑和艺术资产,以匹配场景的大小。
- 设置scaleMode 属性为SKSceneScaleModeResizeFill。 SpriteKit自动 调整场景大小,使其始终与视图的大小匹配。哪里 必要时,调整你的游戏逻辑和艺术资产以匹配场景 大小