Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我得到了一个“答案”;“你输了”;即使游戏还没有结束,游戏场景的更新方法也是如此_Ios_Swift_Game Development - Fatal编程技术网

Ios 我得到了一个“答案”;“你输了”;即使游戏还没有结束,游戏场景的更新方法也是如此

Ios 我得到了一个“答案”;“你输了”;即使游戏还没有结束,游戏场景的更新方法也是如此,ios,swift,game-development,Ios,Swift,Game Development,我无法理解我的逻辑有什么问题。它似乎工作得很好,直到我在应用程序中做了一些改变,用一些方法发现乌龟移动得太快 比赛开始后几秒钟内,我收到一个“你输了”的提示,计数上升。敌人没有碰过我的灵魂,但它还是失去了。为了解决这个问题,我在过去的24小时里绞尽脑汁 代码类似于Ray Wenderlich僵尸Conga override func update(currentTime: CFTimeInterval) { /* Called before each frame is rendered

我无法理解我的逻辑有什么问题。它似乎工作得很好,直到我在应用程序中做了一些改变,用一些方法发现乌龟移动得太快

比赛开始后几秒钟内,我收到一个“你输了”的提示,计数上升。敌人没有碰过我的灵魂,但它还是失去了。为了解决这个问题,我在过去的24小时里绞尽脑汁

代码类似于Ray Wenderlich僵尸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)

    }
覆盖函数更新(currentTime:CFTimeInterval){
/*在渲染每个帧之前调用*/
如果LastUpdateTime>0{
dt=当前时间-上次更新时间
}否则{
dt=0
}
LastUpdateTime=currentTime
//println(“上次更新后的\(dt*1000)毫秒”)
//Tartuga.position=CGPoint(x:Tartuga.position.x+4,y:Tartuga.position.y)
boundsCheckTartuga()
rotateSprite(塔尔图加,方向:CGPoint(x:22,y:300),RotationRadiasPersDec:3)
//stopTartuga()
mandateFall()

如果生活if,你的变量
lifes
game0ver
是在你的类中定义的(看起来就是这样),当它们被更改时,使用它们的
didSet
钩子来获得通知。这样,你可以设置断点,也可以看到调用者,即:

var lives : Int { didSet { println("lives changed to: \(lives)") } }
最终,您可以看到
生命
何时发生变化,并在“意外”设置的情况下跟踪游戏中的点。

Srikanth19

我注意到上面给定代码中有两个不同的变量gameOver和game0ver。 这是粘贴问题时出现的问题还是您定义了两个不同的变量

如果您没有定义两个不同的变量,那么理想情况下应该会出现编译时错误

注: 如果您没有得到编译时错误,那么很有可能在两个实例中将其声明为复制粘贴错误

在您的声明中检查: var game0ver:呸

在代码的其他部分(假设您使用了Ray Wenderlich提供的Zombie Conga代码),您可能使用了正确的变量,它给出了 瓦尔·加莫弗:呸

我已经尝试过Zombie Conga,也参考了代码,您的条件进入的一个原因是if条件变量中的值错误


请共享您的声明部分,或者让我知道您是否能够通过检查game0ver(和/或gameOver)中的值来解决此问题

在您更改
lifes
game0ver
值的任何地方搜索您的代码。某个地方
lifes
变为0或负值,并且
gave0ver
为false。您可能希望检查更新的时间。检查调用频率和原因。显然,这是条件语句的要求,因此我很抱歉除非您在其他地方设置gameOver,否则我会猜测原因。感谢您快速注意到我的代码中的错误。这解决了我的问题。有两个变量,一个为true,另一个为false,导致了这种混乱。