基本的に、私は理論上、特定のプロパティを持つランダムなバルーンを画面に生成する必要がある spawn エンティティ関数を持っています。私はそのようにメソッドを設計しました:
-(void)spawnBalloon
{
int a = arc4random_uniform(self.frame.size.width);
int b = self.frame.size.height - 50;
CGPoint loc = CGPointMake(a, b);
[self spawnBalloonAtPoint:loc];
}
そして、この方法は機能します。init 関数で呼び出すと、機能します。touchesMoved() 関数で呼び出すと、機能します。ただし、 init メソッドで呼び出そうとすると、
[self runAction:[SKAction repeatActionForever:[SKAction performSelector:@selector(spawnBalloon) onTarget:self]]];
失敗します。どうしてこれなの?「self」から performSelector 関数を使用してから、NSTimer を使用して永久に繰り返す必要がありますか?
また、コードに NSLog をスローして、繰り返しアクションのときに実行されているかどうかを確認してみました。唯一の問題は、バルーンが画面に追加されていないことです。私の感覚では、repeatActionForever を介して spawnBalloon 関数を呼び出すと、self が別のクラスを参照していると思いますか? これが混乱している場合は申し訳ありませんが、私はObjective CとSpriteKitにまだ慣れていないため、実際に多くを読む代わりに、必要に応じて学習することにしました(ただし、Java / Cの膨大な知識があります)
編集:repeatForever アクションがない場合、コードが実行されて機能することがわかりました。ただし、そこにある場合は機能しません。