SKLabel.text 整数未更新 - swift
SKLabel.text Integer not updating - swift
我正在创建一个游戏,我已经创建了一个整数来跟踪杀死的敌人数量,但是我无法更新 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()
}
}
我也尝试过使用包含多种不同方式的布尔值更新方法,但 none 有效。
override func update(currentTime: CFTimeInterval) {
if enemy1Killed {Enemy1KillCounter += 1}
Enemy1KillCounterLabel.text = "\(Enemy1KillCounter)"
}
这是我的敌人 class 以及我调用 "enemy1DieG" 方法的地方
我在联系方法中调用了 hit 方法,但我知道这不是问题,因为当敌人 "killed" 被击中 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()
}
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()
}
}
我也尝试过使用包含多种不同方式的布尔值更新方法,但 none 有效。
override func update(currentTime: CFTimeInterval) {
if enemy1Killed {Enemy1KillCounter += 1}
Enemy1KillCounterLabel.text = "\(Enemy1KillCounter)"
}
这是我的敌人 class 以及我调用 "enemy1DieG" 方法的地方
我在联系方法中调用了 hit 方法,但我知道这不是问题,因为当敌人 "killed" 被击中 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()
}