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的介绍

xcode sprite kit 背景音乐

在 Sprite Kit 场景中创建带有重复图像的栏 - iOS

简单的Sprite Kit场景设置出错了