2016-12-02 1 views
2

私は自分のシーンにオブジェクトを生成するためにNSTimerを使用しています。 例:シーンにオブジェクトを生成する方法は?

var enemyTimer = Timer() 

enemyTimer = Timer.scheduledTimer(timeInterval: 0.8, target: self, selector:#selector(GameScene.enemyAppear),userInfo: nil, repeats: true) 

しかし、私はいくつか問題があります。私は時間間隔ではない新しいオブジェクトを生成する必要があります。私はそれらの間にある程度の距離を持って新しいノードを生成する必要があります。例えば、オブジェクト間の150ドット。これどうやってするの? 私の英語には申し訳ありません...

+2

NSTimerがゲームループとペアになっていないため、SKActionを使用して敵をスポーンすることができます。たとえば、ユーザーが通話を受け取った場合、ゲームに戻ると、画面には敵がいっぱいになります。もちろん、NSTimerを無効にしたり再起動したりすることもできますが、これはSKActions(またはupdate:メソッド)で自動的に行われます。 – Whirlwind

答えて

2

forループを使用して数学を適用すると、この問題は簡単に解決できます。

のは、Y = 0で水平線に並んだ各間に100個のピクセル、で、あなたは5体の敵を生成したいとしましょう:

for i in 0..<5 { // repeat 5 times 
    let enemy = SKSpriteNode(imageNamed: "insert your texture for the enemy here") // create new enemy 
    // here's the math part. When we generate the first enemy, i is 0, so it is at (0, 0). 
    // When it's time for the second enemy, i will be 1, so it will be placed at (100, 0) 
    enemy.position = CGPoint(x: 100 * i, y: 0) 
    enemy.anchorPoint = CGPoint(x: 0, y: 0) 
    self.addChild(enemy) 
} 

また、あなたはできるよう配列にあなたの敵を追加したい場合があります後でそれらを取り出す。

+0

こんにちは! あなたの答えをありがとう。私は画面から新しいノードを作成したい。 enemy.size = CGSize(x:160、y:80) enemy.position = CGPoint(x:250、y:1200)(私のシーンのサイズ= 768x1024) 敵はyに移動します: -100。そして私はそれらの間にある程度の距離が必要です。あなたはそれを助けることができますか? ありがとう! @ NexusS。 –

+1

あなたはスクリーンスプライトから離れている必要はありません!ユーザーはとにかくそれらを見ることができません。各Spriteをx秒ごとに移動させてください。これはスプライトがそれらの間にスペースを持つように見えるでしょう – Sweeper

関連する問題