Xcode 7 Sprite Kit X Coordinate Off-Center in iOS Simulator
Posted
技术标签:
【中文标题】Xcode 7 Sprite Kit X Coordinate Off-Center in iOS Simulator【英文标题】: 【发布时间】:2016-01-02 17:22:59 【问题描述】:我刚刚更新到 Xcode 7 / Swift 2,我遇到了这个问题,ios 模拟器中 SpriteKit 中的 x 轴似乎偏离了中心。有人请尝试验证,这很简单。在 Xcode 7 中创建一个新的 SpriteKit 项目,并在 touchesBegan
方法中,在 GameScene.swift 文件中的 let location = touch.locationInNode(self)
下方添加这段代码 print(location)
。
然后在 iOS 模拟器(任何设备,尽管我选择 iPhone 4s)中运行它,并在查看输出结果的同时在视图中单击。 Y 轴在底部为零,但 X 轴在左侧似乎在 300 左右,并且随着您向右移动而增加。我正在为此失去理智!
整个touchesBegan
方法将如下所示:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
/* Called when a touch begins */
for touch in touches
let location = touch.locationInNode(self)
print(location) // <-- *** ADD THIS LINE ***
let sprite = SKSpriteNode(imageNamed:"Spaceship")
sprite.xScale = 0.5
sprite.yScale = 0.5
sprite.position = location
let action = SKAction.rotateByAngle(CGFloat(M_PI), duration:1)
sprite.runAction(SKAction.repeatActionForever(action))
self.addChild(sprite)
如果你能重现它,请告诉我,为什么会这样!
【问题讨论】:
【参考方案1】:尝试在 GameViewController 的 viewWillLayoutSubviews()
方法中添加下一行:
scene.size = skView.bounds.size
我在scene.scaleMode = .AspectFill
行之前添加了它。这解决了问题吗?
【讨论】:
这解决了我的问题,但是样板 SpriteKit 项目模板在viewDidLoad()
而不是 viewWillLayoutSubviews()
中有场景设置代码。虽然我的一些旧项目在viewWillLayoutSubviews()
中有它。我不确定 Xcode 是否更改了模板,或者我自己更改了它并且不记得了。但从 Xcode 7.0.1 开始,它位于 viewDidLoad()
中。但真正的问题是:为什么突然需要这个 sn-p 才能让项目模板像以前一样工作?
没有。问题出在 SpriteKit 模板中。当应用调用 viewDidLoad 方法时,skView 还没有添加到主视图中,所以它的尺寸还不能访问(在viewDidLoad()
你甚至无法知道 skView 是横向还是纵向)。但是,如果您在viewWillLayoutSubviews()
中设置尺寸,您只需确保 skView 已经加载到主视图中,现在您可以获取它的尺寸。最后,我很确定您自己在旧模板中进行了更改,因为这一直是必要的。【参考方案2】:
请在找到下一段代码后找到GameViewController.swift:
if let scene = GameScene(fileNamed:"GameScene")
// Configure the view.
let skView = self.view as! SKView
skView.showsFPS = true
skView.showsNodeCount = true
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
skView.presentScene(scene)
所以你必须添加:
scene.size = UIScreen.mainScreen().bounds.size
行后:
scene.scaleMode = .AspectFill
这将解决您的问题。 希望对你有帮助
【讨论】:
以上是关于Xcode 7 Sprite Kit X Coordinate Off-Center in iOS Simulator的主要内容,如果未能解决你的问题,请参考以下文章
在 removeFromParent 上 Sprite Kit iOS 7.1 崩溃
iOS Sprite Kit教程之xcode安装以及苹果帐号绑定
iOS Sprite Kit教程之编敲代码以及Xcode的介绍