【问题标题】:SKLabel.text Integer not updating - swiftSKLabel.text 整数不更新 - swift
【发布时间】:2016-06-07 19:27:15
【问题描述】:

我正在创建一个游戏,并且我已经创建了一个整数来跟踪被杀死的敌人的数量,但是我无法让 UI 上的 sklabel 更新。不管有多少敌人,整数一直显示为0。这是我尝试过的一些方法

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”方法

我在接触方法中调用了 hit 方法,但我知道这不是问题,因为当敌人被击中 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。这可能是一个简单的答案,我一直错过它,如果有人能帮忙就太好了。

【问题讨论】:

    标签: string swift sprite-kit sklabelnode


    【解决方案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()
    }
    

    【讨论】:

    • 对于你的第一个理论——你每个场景只能有 1 个 SKlabel 吗?或者你的意思是我有 2 个相同的标签,我正在为你的第二个打印一个而不是另一个 - 我的背景是灰色的,所以我可以看到它显示的是 0,它只是没有更新,而对于你的第三个 - 你是什么男人的标签从何而来?我在游戏场景类中创建了标签并在视图方法@appzYourLife中调用它
    • @gkolman:您可以拥有任意数量的标签。我怀疑您的场景中还有另一个标签(通过模拟器可见的标签),这可以解释为什么对 Enemy1KillCounterLabel 的更改不可见。我用测试代码更新了答案。请使用它并让我知道您在模拟器中看到的标签。
    • 文字显示“你看到我了吗?”大声笑我应该如何进行? @appzYourLife
    • yessir :D @appzYourLife 我将变量改为小写
    • @gkolman:那我不明白。另一个问题。当一个敌人被杀死时,你怎么称呼enemy1DieG()?你能告诉我完整的代码块吗?
    猜你喜欢
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多