2016-06-07 22 views
1

crash screen/ error message 我創建了一個遊戲,並且我創建了一個跟蹤殺死敵人數量的整數,但是我無法在UI上更新sklabel。無論整數多少敵人不停地顯示爲0。這裏有一些方法我都試過SKLabel.text整數不更新 - swift

class GameScene: SKScene, SKPhysicsContactDelegate { 

var Enemy1KillCounter = 0 
var Enemy1KillCounterLabel = SKLabelNode() 

override func didMoveToView(view: SKView) { 

    createEnemyKilledLabel() 
} 

func createEnemyKilledLabel() { 

    Enemy1KillCounterLabel.fontSize = 65 
    Enemy1KillCounterLabel.fontColor = SKColor .blackColor() 
    Enemy1KillCounterLabel.position = CGPointMake(400, 400) 
    self.addChild(Enemy1KillCounterLabel) 
} 

func updateEnemy1KillCounter() { 

    Enemy1KillCounter += 1 
    Enemy1KillCounterLabel.text = "\(Enemy1KillCounter)" 
    score = score + 15 
    //enemy1Killed = true I had tried Boolean values as well 
    print("updateEnemy1KillCounter") 

} 
    //this method is called in my enemy1 class when its "killed" 
func Enemy1DieG() { 

    updateEnemy1KillCounter() 

    } 
} 

我已經使用更新方法與布爾值牽連多種不同的方式,但沒有工作也試過。

override func update(currentTime: CFTimeInterval) { 

    if enemy1Killed {Enemy1KillCounter += 1} 
    Enemy1KillCounterLabel.text = "\(Enemy1KillCounter)" 

} 

這裏是我的敵人類,並在那裏我打電話了「enemy1DieG」方法

我打電話的聯繫方式命中方法,但我知道這不是問題,因爲當敵人是「封殺」,當它被擊中5倍的所以enemy1die和killCounter方法被稱爲

class Enemy1: SKNode { 

var Enemy1Health:Int = 50 

func hit() ->Bool { 

Enemy1Health -= 10 
Bullet1GoAway = true 

if (Enemy1Health <= 0) { 

     Enemy1Die() 
    return true 
    } else { 
    return false 
} 
} 
func Enemy1Die() { 
    self.removeFromParent() 
    Enemy1KillCounter() 
} 

func Enemy1KillCounter(){ 
    GameScene().Enemy1DieG() 
} 
} 

它太奇怪了所有的方法被稱爲我用各種方法印刷的,以保證,但我的整數沒有更新中我的UI只是繼續顯示0.這可能是這樣的簡單的答案,我一直想念它,如果任何人都可以幫助那會很棒。

回答

1

當內部Enemy1KillCounter()你寫

GameScene().Enemy1DieG() 

使用屏幕上顯示的GameScene。

而是臨時創建一個新的空白屏幕,調用Enemy1DieG()就可以了,它們將銷燬它。

請更換此

func Enemy1KillCounter(){ 
    GameScene().Enemy1DieG() 
} 

與此

func Enemy1KillCounter() { 
    guard let gameScene = self.scene as? GameScene 
     else { fatalError("Current node is not inside a GameScene") } 
    gameScene.Enemy1DieG() 
} 
+0

你的第一個理論 - 你只能有每個場景1個SKlabel?或者你的意思是我有2個相同的標籤,而我正在打印一個而不是第二個 - 我的背景是灰色的,所以我可以看到它顯示0它只是不更新​​,對於你的第三個 - 你是什麼男人從哪裏來的標籤?我在遊戲場景類中創建了標籤並在視圖方法中調用它@appzYourLife – gkolman

+0

@gkolman:您可以擁有任意數量的標籤。我懷疑場景中有另一個標籤(通過模擬器可見),這可以解釋爲什麼對'Enemy1KillCounterLabel'的更改不可見。我通過回答測試代碼進行更新。請使用它並讓我知道您在標籤中看到的模擬器中的內容。 –

+0

文字說「你看見我了嗎?」大聲笑我應該如何繼續? @appzYourLife – gkolman