私は現在ゲームに取り組んでおり、毎秒、画面の上部から始まる x 個の新しい UIImage オブジェクトを作成したいと考えています。それらがインスタンス化された後、画面の下部に到達するまで自動的に落下するようにします。その時点で、それらは使用できなくなります。
それはまるで雨のしずくのようで、毎秒 X 個の雨滴が作られ、それぞれ異なる速度で落下します。
これを行うためにプログラムを設計する方法について、私は本当に混乱しています。
どんな助けでも大歓迎です。ありがとう。
それらはすべて同じ画像のコピーですか、それとも限られた画像セットのうちの少なくとも1つのコピーですか?このようなゲームのようなグラフィックを多用するアプリの場合、OpenGL ESの使用を真剣に検討しますが、UIKitのみに精通している人にとっては学習曲線が急です。幸い、Cocos2dなどのサードパーティのオープンソースライブラリがあり、UIKitとほぼ同じくらい簡単に効率的な2Dグラフィックスをコーディングできます。
特にあなたの質問に関して、私は@ctraheyによって言及されたビデオを見ていませんが、私はこれらのパターンを考えることができます:
再利用可能なオブジェクトの(有限の)「プール」を用意します。このサイズは、任意の時点で画面に表示される可能性のあるインスタンスの最大数に等しくなります。グラフィックスのパフォーマンスは無限ではないため、この制限を設定する必要があります。オブジェクトが画面から外れるたびに、その状態を「リセット」して再利用します(上からもう一度)。UITableViewは、テーブルセルでこのようなことを行います。
オンデマンドでインスタンスを作成し、画面外に出たら破棄します(リリース->割り当て解除)。
インスタンスの作成/破棄の実行時コストと、オブジェクトのリセットのコスト/不便さのバランスをとる必要があります。
それが役に立てば幸い
ステップ 1: 毎秒コードを実行する
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(dispatchSomeRaindrops) userInfo:nil repeats:YES];
ステップ 2: いくつかのパーティクルを作成し、それらを画面の下に送り、底に到達したらクリーンアップします。
- (void)dispatchSomeRaindrops
{
for (int i = 0; i < 5; i++) {
UIImageView *view = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"safari.png"]];
CGFloat halfHeight = view.frame.size.height / 2;
CGFloat x = arc4random() % (int)self.view.frame.size.width;
view.center = CGPointMake(x, -halfHeight);
[self.view addSubview:view];
NSTimeInterval duration = 10 + arc4random() % 10;
[UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
float endY = self.view.frame.size.height + halfHeight;
view.center = CGPointMake(x, endY);
} completion:^(BOOL finished) {
[view removeFromSuperview];
}];
}
}
WWDC 2011のコア アニメーション ビデオをチェックしてください。最後に少し「レプリケーター」があり、まさにあなたが求めているものと同じように聞こえます。
参考までに、この正確なシナリオを処理するための素晴らしいリソースを見つけました。cocos2d を使用する必要がありますが、非常に明確でわかりやすい方法で説明されています。
http://www.raywenderlich.com/352/how-to-make-a-simple-iphone-game-with-cocos2d-tutorial