SKLabel.text整数不更新 - swift

问题描述:

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.这可能是这样的简单的答案,我一直想念它,如果任何人都可以帮助那会很棒。

当内部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