Ios模拟器在Xcode 6中以0.0 fps运行



我知道以前也有人问过关于ios模拟器慢的问题。但我的问题不是模拟器太慢。而是模拟器以0.0 fps的速度运行(根据底部的文本),我无法测试我的任何代码。我很困惑,任何帮助都会很感激。没有足够的声誉来发布图片。但在底部显示3个节点0.0 fps

更新我从我的代码中删除了下面的代码,它又开始正常工作了。

while left {
            var leftMove = SKAction.moveByX(1, y: 0, duration: 0.1)
            person.runAction(leftMove)
        }
        while !left{
            var rightMove = SKAction.moveByX(-1, y: 0, duration: 0.1)
            person.runAction(rightMove)
        }

是从我的update()方法中获取的这是全部内容……

import SpriteKit
class GameScene: SKScene {
    var person = SKSpriteNode(imageNamed: "guyLeft_1.png")
    var left = true
    override func didMoveToView(view: SKView) {
        self.backgroundColor = SKColor.whiteColor()
        var ground = SKShapeNode(rectOfSize: CGSizeMake(self.frame.size.width, self.frame.size.height * 0.2))
        ground.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height * 0.1)
        ground.fillColor = SKColor.blueColor()
        self.addChild(ground)
        person.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height * 0.2)
        self.addChild(person)
    }
    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        /* Called when a touch begins */
        !left
    }

    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
        while left {
            var leftMove = SKAction.moveByX(1, y: 0, duration: 0.1)
            person.runAction(leftMove)
        }
        while !left{
            var rightMove = SKAction.moveByX(-1, y: 0, duration: 0.1)
            person.runAction(rightMove)
        }
    }
}

表示0fps,因为它不能只渲染一次场景。

改成

override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */
    if left {
        var leftMove = SKAction.moveByX(1, y: 0, duration: 0.1)
        person.runAction(leftMove)
    }
    if !left { // or use an if-else construct
        var rightMove = SKAction.moveByX(-1, y: 0, duration: 0.1)
        person.runAction(rightMove)
    }
}

这里没有太多需要解释的——while语句只是导致了一个无限循环。如果你没有break语句,并且while语句体没有改变计算条件left,那么程序将永远卡在while循环中。

另外

:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    left = false // either
    left = !left // or
}

前面的代码只计算!left并忽略结果——实际上什么也不做。

最新更新