我知道以前也有人问过关于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并忽略结果——实际上什么也不做。