在我的SKScene中,我正在制作一个简单的太空射击游戏。我怎样才能确保我的敌人总是出现在屏幕尺寸内,无论游戏在哪个iphone上播放?
换句话说,如何计算场景大小的最大和最小X坐标,更重要的是我如何知道当前场景大小取决于运行游戏的iphone?
答案 0 :(得分:0)
根据iPhone型号不要调整你的场景大小,让Sprite-kit做这样的工作:
scene.scaleMode = SKSceneScaleMode.ResizeFill
场景未缩放以匹配视图。相反,场景是 自动调整大小,使其尺寸始终与 观点。
关于大小,首次初始化场景时,其size属性由指定的初始化程序配置。场景的大小以点为单位指定场景的可见部分的大小。这仅用于指定场景的可见部分。
更新以帮助您定位:
如果您想设置您的位置而不是使用scaleMode,您可以
将scene.scaleMode
设置为 .AspectFill ,以便在所有场景中使用,场景大小必须为 2048x1536 或 1536x2048 。这也将使其适用于iPad。
class StartScene: SKScene {
let playableArea: CGRect!
}
override init(size: CGSize) {
//1. Get the aspect ratio of the device
let deviceWidth = UIScreen.mainScreen().bounds.width
let deviceHeight = UIScreen.mainScreen().bounds.height
let maxAspectRatio: CGFloat = deviceWidth / deviceHeight
//2. For landscape orientation, use this
let playableHeight = size.width / maxAspectRatio
let playableMargin = (size.height - playableHeight) / 2.0
playableArea = CGRect(x: 0, y: playableMargin, width: size.width, height: playableHeight)
//3. For portrait orientation, use this
let playableWidth = size.height / maxAspectRatio
let playableMargin = (size.width - playableWidth) / 2.0
playableArea = CGRect(x: playableMargin, y: 0, width: playableWidth, height: size.height)
super.init(size: size)
}
因此,您可以使用以下方式定位对象:
ball.position = CGPoint(x: CGRectGetMidX(playableArea), y: CGRectGetMaxY(playableArea) - (ball.size.height * 0.90))
此代码适用于iPhone 4S,5,5S,6,6 Plus,6S,6S Plus和iPad 。
如果你想看到边框(无论是否调试):
func drawWorkArea() {
let shape = SKShapeNode()
let path = CGPathCreateMutable()
CGPathAddRect(path, nil, workArea)
shape.path = path
shape.strokeColor = SKColor.redColor()
shape.lineWidth = 8
addChild(shape)
}