我无法理解我的逻辑出了什么问题。它似乎一切正常,直到我用几种方法对应用程序进行了一些更改,以发现移动得太快。
我在游戏开始后的几秒钟内得到一个"你输了",计数上升。敌人还没有碰到我的精灵节点,但它还是输了。在过去的 24 小时内,我正在打破我的头来解决这个问题。
代码类似于Ray Wenderlich Zombie Conga
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
if lastUpdatedtime > 0 {
dt = currentTime - lastUpdatedtime
} else {
dt = 0
}
lastUpdatedtime = currentTime
//println("(dt*1000) milliseconds since last update")
//Tartuga.position = CGPoint(x: Tartuga.position.x + 4 , y: Tartuga.position.y)
boundsCheckTartuga()
rotateSprite(Tartuga, direction: CGPoint(x:22, y: 300),rotationRadiansPerSdec: 3)
//stopTartuga()
mandateFall()
if lives <= 0 && !game0ver {
gameOver = true
println("you lose!")
let reveal = SKTransition.flipHorizontalWithDuration(0.5)
}
Srikanth19,
我注意到上面给定的代码中有 2 个不同的变量 gameOver 和 game0ver。这是将问题粘贴到此处时的问题,还是您定义了 2 个不同的变量?
如果您没有定义 2 个不同的变量,那么理想情况下应该会出现编译时错误。
注意:如果您没有收到编译时错误,那么您很有可能在 2 个实例中将其声明为复制粘贴错误。
在声明中检查:var game0ver: bool!
在代码的其他部分(假设您使用了 Ray Wenderlich 的僵尸康加代码),您可能使用了正确的变量,它给出了var gameover: bool!
我尝试过僵尸康加,也参考了代码,你的条件进入的一个原因是因为 if 条件变量中的值错误......
请分享您的声明部分,或者让我知道您是否能够通过检查game0ver(和/或gameOver)中的值来解决此问题
如果您的变量lives
和game0ver
在您的类中定义(这就是它的样子),请使用它们的 didSet
钩子在更改时获得通知。这样,您可以设置断点并查看调用方,即:
var lives : Int { didSet { println("lives changed to: (lives)") } }
最终,您可以看到lives
何时更改,并在游戏中"意外"设置时跟踪该点。