2017-05-22 10 views
-1

私は自分のコードに2つのラベルノードを追加し、もう一方が表示されている間は隠しておき、ゲームが始まったら逆にします。skLabelNodesは時々しか動作しません

class GameScene: SKScene { 
    // Declarations 
    let startLabel:SKLabelNode = SKLabelNode() 
    let scoreLabel:SKLabelNode = SKLabelNode() 
    var score = 0 

    override func didMoveToView(view: SKView) { 
     // Properties 
     startLabel.fontSize = 20 
     startLabel.fontColor = UIColor.blackColor() 
     startLabel.position = CGPointMake(self.frame.width*0.5, self.frame.height*0.5) 
     startLabel.text = "Touch Paddle To Begin" 
     startLabel.hidden = false 
     self.addChild(startLabel) 

     scoreLabel.fontSize = 20 
     scoreLabel.fontColor = UIColor.blackColor() 
     scoreLabel.position = CGPointMake(self.frame.width*0.5, self.frame.height*0.75) 
     scoreLabel.text = "\(score)" 
     scoreLabel.hidden = true 
     self.addChild(scoreLabel) 

次に、パドルがタッチされると、moveBall()関数が開始され、ゲームが開始されます。ここで私はラベルを入れ替えました。

func moveBall() { 

    // Setting Labels 
    self.startLabel.hidden = true 
    self.scoreLabel.hidden = false 

    // Starting game 
    self.ball.physicsBody?.dynamic = true 

ただし、時にはうまくいきます。それは完全に動作し、何も変更せずに再び実行し、1つのラベルしか表示されません。もう一度、もう1つのラベルが表示されます。そうしないと、フレームだけが表示され、startLabelが消えます。

免責事項:コード作成の方法はわかりません。ゲームのアイディアを得て、それを実現しようとしています。ソリューションが単純なものであれば謝罪してください。また、私のコードのアドバイスをいただければ幸いです。ありがとう!

+0

どこでmoveBall()を呼び出しますか? – Whirlwind

+0

ラベルのzPositionを確認し、 'GameViewController.swift'で' ignoreSiblingOrder'を 'false'に設定していますか?ラベルがその背後に描かれているのではないかと疑問に思いますか? –

答えて

0

与えられた情報から正しく動作するはずです。ただし、touchesBeganメソッドでmoveBall()を呼び出す必要があります。更新方法ではありません。

また、ユーザーがlabelNodeをタッチすると呼び出されるようにするには、タッチの位置が始まります。 (でも、ラベルの代わりにスプライトを使用したいのですが、ラベルが少し反応しない場合もあります。

正しい方法でmoveBall()を呼び出します。より正確な答え。

関連する問題