2016-06-07 4 views
1

crash screen/ error message Im Erstellen eines Spiels, und ich habe erstellt und Integer, die die Anzahl der getöteten Feinde verfolgt, aber ich kann nicht das Sklabel auf der Benutzeroberfläche zu aktualisieren. egal, wie viele Feinde die ganze Zahl 0. Hier gehalten Anzeigen sind nur einige der Methoden habe ich versuchtSKLabel.text Ganzzahl nicht aktualisieren - 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() 

    } 
} 

i auch die Update-Methode versucht haben, unter Verwendung von mit Boolesche Werte mehrere verschiedene Möglichkeiten, aber keiner arbeitete gebracht.

override func update(currentTime: CFTimeInterval) { 

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

} 

hier ist mein Feind Klasse und wo ich das „enemy1DieG“ Verfahren in einem Kontaktverfahren

Ich nenne den Treffer Methode nenne, aber ich weiß, dass ist nicht das Problem, weil, wenn der Feind ist " „getötet, wenn er getroffen 5x ist so die enemy1die und killCounter Methoden

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() 
} 
} 

seine so seltsam sind alle Methoden genannt werden wird i bei jedem Verfahren verwendet Druckwerte aufgerufen, um sicherzustellen, aber meine ganze Zahl ist die Aktualisierung nicht in Meine UI zeigt nur 0 an. Das ist wahrscheinlich so ein einfache Antwort und ich vermisse es immer, wenn jemand helfen kann, wäre das großartig.

Antwort

1

Wenn innerhalb Enemy1KillCounter() schreiben Sie

GameScene().Enemy1DieG() 

Sie NICHT mit dem GameScene auf dem Bildschirm angezeigt werden.

Stattdessen erstellen Sie vorübergehend einen neuen leeren Bildschirm, rufen Enemy1DieG() darauf auf und sie zerstören es.

Bitte ersetzen Sie diese

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

mit diesem

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

für Ihre erste Theorie - können Sie nur 1 SKlabel pro Szene haben? Oder meinst du, ich habe 2 der gleichen Etiketten und ich drucke eine und nicht die andere für Ihre 2. - mein Hintergrund ist grau, so kann ich sehen, dass es 0 zeigt es einfach nicht aktualisieren und für Ihre dritte- was tun Sie Männer, woher kommt das Label? Ich habe das Label in der Spieleszenenklasse erstellt und in der View-Methode @appzYourLife aufgerufen. – gkolman

+0

@gkolman: Sie können so viele Labels haben, wie Sie möchten. Ich vermute, dass es in Ihrer Szene ein anderes Label gibt (das über den Simulator sichtbar ist), dies würde erklären, warum die Änderungen an "Enemy1KillCounterLabel" nicht sichtbar sind. Ich aktualisierte durch Antwort mit einem Testcode. Bitte benutzen Sie es und lassen Sie mich wissen, was Sie in Ihrem Etikett in den Simulator sehen. –

+0

Der Text sagt "Siehst du mich?" lol, wie soll ich weitermachen? @appzYourLife – gkolman

Verwandte Themen