2017-08-18 12 views
0

私は最初の単純なIOSゲームを作成し、レイヤーに自分のゲームでgameLayerを作成し、再開ボタン/ノードでpauseLayerを作成しました。私のgameLayerには、ゲームを一時停止するボタンがあり、一時停止ボタンでボタン/ノードを再開します。私はtouchesEnded関数からポイントを取得し、私の関数の中でそのようにこれをしなかった:私は私の履歴書ボタンを参照してくださいカントそのほかSwift SpriteKitレイヤー/ノードが十分に読み込まれない

var ispaused = false 

    func touchend(atPoint pos : CGPoint) { 
    if ispaused == false && pausebutton.contains(pos) { 
     pauseLayer.isHidden = false 
     view?.isPaused = true 
     ispaused = true 
    } 
    if ispaused == true && resumebutton.contains(pos) { 
     pauseLayer.isHidden = true 
     view?.isPaused = false 
     ispaused = false 
    } 
    } 

すべてが働いています。私はそれがどこにあるべきかをクリックして、ゲームを再開する。しかし、私がラインview?.isPaused = trueを削除すると、ボタンが表示されるはずです。 これにより、一時停止しているビューでも、自分のレジュームボタンをロード/表示するプロセスが一時停止する可能性があることがわかりました。どうすればこの問題を回避できますか?

+0

ボタンは画像/テクスチャでもまだ色付きのノードではありません。 – Void2g

+0

'self.isPaused'に加えて' view?isPaused'の両方が必要なのはなぜですか? – Muffinman2497

+0

ispausedは私が他の関数のために必要とするために作成したvar(ブール値)です。しかし、私はこれが私の問題を引き起こすとは思わない。私は 初期化をコードの1行目に追加しました。 – Void2g

答えて

0

十分速く読み込まれていないというあなたの理論を試してみてください。

あなたはこれでコードの実行を遅らせることができます。

let delayDuration:Double = 1.0 /* In seconds */ 

let totalDelayTime = DispatchTime.now() + delayDuration 

DispatchQueue.main.asyncAfter(deadline: totalDelayTime, execute: { view?.isPaused = true }) 

それは、それがうまくいくかどうかわからない、また、これを試してみてくださいview?.isPaused

+0

タイです。何とかあなたのメソッドは私のために働いていなかったので、SKaction.waitを遅延として使用しました。遅れてもすべてがうまくいきますが、ゲームが一時停止するまで0.1秒かその他の遅延を待つ必要がある場合、これはユーザーにとって理想的ではありません。 – Void2g

+0

okでも0.01秒で動作するので、これは私の瞬間には十分です。 – Void2g

0

を評価する前に1秒を待ちます。

defer { view?.isPaused = true } 

deferステートメントは、現在のスコープの終わりまで実行を延期します。 touchEnd関数の終わりになるのはどちらでしょうか?

+0

まだロードされません:(私の0.01秒の遅れにとどまるでしょう。 – Void2g

関連する問題