【发布时间】:2016-05-14 02:18:03
【问题描述】:
说明
我正在 iPhone 5s 上构建游戏,但现在我想让它通用化,以便它可以在所有 iPhone(或至少 4s)和所有 iPad(或至少 iPad 2)上运行。
到目前为止,我几乎创建了这 3 张图像(1x、2x 和 3x)。所以有一个 50x50 的正方形 (@1x)、一个 100x100 的正方形 (@2x) 和一个 150x150 的正方形 (@3x)。
这是我正在测试的示例项目(下载here):
import SpriteKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
/* Setup your scene here */
scene!.scaleMode = SKSceneScaleMode.ResizeFill //usually at GameViewController, not GameScene
let square = SKSpriteNode(imageNamed: "square")
square.anchorPoint = CGPointZero
square.position = CGPoint(x: self.frame.width / 1.095, y: self.frame.height / 1.1875) //superior right on iPhone 5/5s
addChild(square)
}
}
这些是图片:
测试
当我在每台设备上运行时,都会发生这种情况:
- iPhone 4s - 位置错误
- iPhone 5/5s - 右侧位置(此处已设置)
- iPhone 6/6s - 位置错误
- iPhone 6+/6s+ - 位置错误
- iPad 2 - 位置错误
- iPad Air/iPad Air 2 - 位置错误
- iPad Pro - 位置错误
- iPad 视网膜 - 位置错误
问题
基本上,我的问题是:我怎样才能使这个通用?我的意思是,我怎样才能使正方形定位在上面设备上的相同相对位置?
尝试
迈克尔·奥斯汀的尝试(下载here)
import SpriteKit
// MARK: Screen Dimensions
let screenWidth = CGFloat(1024)
let screenHeight = CGFloat(768)
// MARK: Node Sizes
let square = SKSpriteNode(imageNamed: "square")
let nodeConstantWidth = screenWidth/square.size.width * 0.088
let nodeConstantHeight = screenHeight/square.size.height * 0.158
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
/* Setup your scene here */
scene!.scaleMode = SKSceneScaleMode.Fill //usually at GameViewController, not GameScene
square.xScale = nodeConstantWidth
square.yScale = nodeConstantHeight
square.anchorPoint = CGPointZero
square.position = CGPoint(x: screenWidth / 1.5, y: screenHeight / 1.5)
addChild(square)
}
}
蒂米·索伦森的尝试(下载here)
import SpriteKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
/* Setup your scene here */
scene!.scaleMode = SKSceneScaleMode.ResizeFill //usually at GameViewController, not GameScene
let square = SKSpriteNode(imageNamed: "square")
square.anchorPoint = CGPointZero
square.position = CGPoint(x: self.frame.width / 1.095, y: self.frame.height / 1.1875) //superior right on iPhone 5/5s
addChild(square)
}
}
【问题讨论】:
-
仅供参考 - 您的 3x 图像需要为 150x150,而不是 200x200。请记住,3x 图像的宽度和高度是 1x 图像的 3 倍。
-
对不起,我写得很快。实际上是 150x150
-
每台设备上的同一个地方是什么意思?考虑到屏幕尺寸不同并且具有不同的纵横比,目前尚不清楚您希望定位如何工作。也许缺乏定义是问题的一部分?
-
对不起,其实是同一个相对位置。我不知道,但让我们以 Flappy Bird 的鸟为例。鸟应该处于相同的相对位置,并且对于每个设备具有相同的相对大小。通过为每个节点使用这 3 个图像来解决这个大小“问题”(至少我认为它在我的测试项目中有效)。
标签: ios swift sprite-kit