0

私はしばらくの間UIImageを理解しようとしてきました。私は、「メインゲームビュー」を1つのビューにし、「レベル」変数に応じて2/3/4の異なる画像を表示する方法を模索してきました。私はただ論理を確かめようとしているだけです。たとえば、レベル1では4つの画像が表示され、レベル2では3つの異なる画像が表示されます。アプリのパフォーマンスを妨げたくはありませんが、ゲームはオフラインでプレイされ、アーカイブは大きな違いをもたらさないため、すべての画像(数百の最適化された画像)がメインのアプリバンドルにローカルに保存されます。

これまでのところ、これを実装しようとする私の論理が正しいかどうか疑問に思っています。レベル1の場合、必要な4つのUIImageViewを実装し、それらを画像で初期化してから、画面の設定された位置に表示します。次に、GCDを使用して次のレベルの画像をプリロードします。続行ボタンを押すと、UIImagesとUIImageViewsがnilに設定され、画面にレベル2(または次のレベル)が表示されます。

私は自分のアプローチに自信がなく、それを簡単にする何かがあるのか​​、それとも私が見逃しているものがあるのか​​、あるいは実際には理論に従って機能するのかどうか疑問に思っていました。

お手数をおかけしますが、よろしくお願いいたします。
これが不明な場合は申し訳ありません。

4

1 に答える 1

0

すべてのレベルに単一のView Controllerクラスを使用し、.plistファイルまたはその他の形式からレベルをロードすると仮定しています。

わざわざ GCD を使用しないでください。ロード中にレベルごとに 1 回 4 つの画像をロードすると、ほとんどコストがかかりません。

各レベルの画面に (他のレベル要素に加えて) 2 ~ 4 個の画像を表示するだけでよい場合は、4 つUIImageViewのインスタンスを作成してビューに追加するだけです。次に、レベルをロードするときに、必要な画像ファイルから新しいUIImageオブジェクトを作成し、 UIImageViews' image プロパティをそれらに設定します。古いレベルのUIImageオブジェクトは、その時点で解放され、割り当てが解除されます。これは、あなた (およびUIImageViews) がオブジェクトへの強い参照をもう持っていないためです。

疑似実装:

- (void)loadLevel:(int)levelNumber {
    // Assuming you have your image views in an array imageViews.
    // Determine the image files required for this level.
    // Put them into an array imageNames.

    for (int i = 0; i < 4; i++) {
        if (imageNames.count < i) {
            UIImage *image = [UIImage imageNamed:imageNames[i]];
            [self.imageViews[i] setImage:image];
        } else {
            [self.imageViews[i] setImage:nil];
    }
}
于 2013-03-16T13:02:31.733 に答える