我正在探究iOS 8 beta版本中的SpriteKit,并将我的项目部署目标设置为iOS 7,以便在运行发布的iOS 7.1的iPad Air上进行测试。
我发现在模拟器(运行iOS 8)和我的设备(运行iOS 7.1)之间,我的
从iOS SpriteKit游戏模板开始,我修改了设置,只支持横屏向右方向,并将以下代码添加到
请注意,这里使用了我为处理
在任何iOS 8模拟器(包括iPad Air模拟器)下运行时,
但是当我在我的设备上运行它时,我却得到了以下错误信息:
因此,似乎该视图没有正确反映它处于横向方向。为什么会发生这种情况呢?
附注:我已经下载了iOS 7.1模拟器,并且现在可以报告它们与设备一致。也就是说,这似乎是iOS 7.1的一个错误/特性。
我发现在模拟器(运行iOS 8)和我的设备(运行iOS 7.1)之间,我的
SKScene
和它的SKView
之间的坐标不一致。以下是我用来隔离这种不一致性的代码:从iOS SpriteKit游戏模板开始,我修改了设置,只支持横屏向右方向,并将以下代码添加到
GameScene
类中:class GameScene: SKScene {
…
var scaleFromView: CGPoint!
override func didMoveToView(view: SKView) {
/* Setup your scene here */
label = SKLabelNode(fontNamed:"Chalkduster")
label.text = "Hello, World!";
label.fontSize = 65;
label.position = CGPoint(x:0.0, y:0.0);
label.zPosition = -1.0
let referencePt = CGPoint(x: 100, y: 100)
var viewPt = convertPointToView(CGPoint(x: 0, y: 0))
viewPt = viewPt + referencePt
let scenePt = convertPointFromView(viewPt)
scaleFromView = scenePt / referencePt
println(" view.bounds is \(view.bounds)")
println(" scene.size is \(scene.size)")
println("scaleFromView is \(scaleFromView)")
world.addChild(label)
}
…
请注意,这里使用了我为处理
CGPoint
定义的一些运算符:@infix func + (a: CGPoint, b: CGPoint) -> CGPoint {
return CGPoint(x: a.x + b.x, y: a.y + b.y)
}
@infix func - (a: CGPoint, b: CGPoint) -> CGPoint {
return CGPoint(x: a.x - b.x, y: a.y - b.y)
}
@infix func * (a: CGPoint, b: CGPoint) -> CGPoint {
return CGPoint(x: a.x * b.x, y: a.y * b.y)
}
@infix func / (a: CGPoint, b: CGPoint) -> CGPoint {
return CGPoint(x: a.x / b.x, y: a.y / b.y)
}
在任何iOS 8模拟器(包括iPad Air模拟器)下运行时,
println
语句会记录日志(根据场景和视图边界设置的预期结果)。 view.bounds is (0.0,0.0,1024.0,768.0)
scene.size is (1024.0,768.0)
scaleFromView is (1.0,-1.0)
但是当我在我的设备上运行它时,我却得到了以下错误信息:
view.bounds is (0.0,0.0,768.0,1024.0)
scene.size is (1024.0,768.0)
scaleFromView is (0.75,-0.75)
因此,似乎该视图没有正确反映它处于横向方向。为什么会发生这种情况呢?
附注:我已经下载了iOS 7.1模拟器,并且现在可以报告它们与设备一致。也就是说,这似乎是iOS 7.1的一个错误/特性。
SKView
。 - Kaelin Colclasure