update
メソッドを使用する代わりに、タイマーを使用できます。ソースから:あなたはアップルガイドに従うならば
public class func scheduledTimerWithTimeInterval(ti: NSTimeInterval, target aTarget: AnyObject, selector aSelector: Selector, userInfo: AnyObject?, repeats yesOrNo: Bool) -> NSTimer
だから、それは例えば次のようになります。
NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: Selector("spawnAlien:"), userInfo: myParameter, repeats: true)
func spawnAlien(timer : NSTimer) {
if let myUserInfo = timer.userInfo {
print(myUserInfo) // a parameters passed to help you to the alien creation
}
timer.invalidate()
}
しかしWhirlwind
によると、私は彼と一緒にしてLearnCocos2d仕事、スプライトキット丼に同意しますタイマ(詳しくはLearnCocos2d
のリンクで説明されています)とより良い方法、特に最初のゲームを開発したら、SKAction
を使用して、同様の動作を実現するアクションの組み合わせを使用しますdによってNSTimer
。
私は予想通り、それが仕事だなら、私に知らせて、機能や拡張について考えてきました:
extension SKAction {
class func scheduledTimerWithTimeInterval(time:NSTimeInterval, selector: Selector, repeats:Bool)->SKAction {
let call = SKAction.customActionWithDuration(0.0) { node, _ in
node.performSelector(selector)
}
let wait = SKAction.waitForDuration(time)
let seq = SKAction.sequence([wait,call])
let callSelector = repeats ? SKAction.repeatActionForever(seq) : seq
return callSelector
}
}
使用:
let spawn = SKAction.scheduledTimerWithTimeInterval(time, selector: #selector(GenericArea.spawnAlien), repeats: true)
self.runAction(spawn,withKey: "spawnAlien")
簡単です。彼らに名前を与え、その名前でそれらを列挙してください。または、それらを配列に保ち、その配列をループします。シーンにスプライトを追加するには配列をループする必要がありますが、update:メソッド(これは毎秒60回実行されます)ではそうしたくないかもしれません。また、スプライトに追加する前に親があるかどうかを確認することもできます。 – Whirlwind
@whirlwindどこでそれをやるべきですか?新しい敵をプッシュし、古い(殺した)ものを削除する必要があるので、配列は絶えず更新されていますので、配列をループしてシーンに 'addChild(newEnemy) 'するか、 (物理特性のように)それらのすべてを一度に有効にすることもできます。 – Sam
これは達成しようとしていることによって異なります。私はあなたが望むものを実際に得ることはできませんが、@AlessandroOrnanoがあなたに正しい方向を教えてくれたようです。たとえば、特定の連絡先が発生したときにすべてのノードに影響を与えたい場合は、didBeginContactまたは同様のメソッドでノードを列挙する必要があります。または、同じことをしたい場合でも、ユーザーが画面にタッチすると、touchesBeganでその操作を行います。または、特定のアニメーションが完了した後でこれを行う場合は、そのアニメーションの完了ハンドラで行います。それはあなた次第です。 – Whirlwind