0

高さが異なる複数の画像で作られた床があるゲームを作成しました.. (床は平らではありません) ifステートメントを100万回開くのではなく:

if (CGRectIntersectsRect(ball1.frame, floor1.frame)) { }

if (CGRectIntersectsRect(ball1.frame, floor2.frame)) { }

if (CGRectIntersectsRect(ball1.frame, floor3.frame)) { }

if (CGRectIntersectsRect(ball1.frame, floor4.frame)) { }

//等々...

.

1 つの if ステートメントを使用して衝突をチェックする方法はありますか? すべての UIImageView フロア ピースには、「floor1、floor2、floor3、floor4 など」という名前が付けられます。

ありがとう!

補足: CGRectIntersect コードを使用したい場合、画像を回転させます。交差をチェックしているのは、まだ画像フレームの衝突のみをチェックしているように見えるため、回転するかどうかに関係なく、同じ場所で衝突します。これを修正するためにフレームも回転できますか、それとも別のコードを使用する必要がありますか?

4

2 に答える 2

2

私はあなたの質問をよく理解していませんが、単純化できると思います。タイルに floor1、floor2、... という名前を付ける代わりに、代わりに配列を使用する必要があります。このようにして、if ステートメントを 3 つのステートメントに折りたたむことができます。

for (int i = 0; i < num_tiles; i++) {
    if (CGRectIntersectsRect(ball1.frame, floor[i].frame)) {
         put code here
    }
}
于 2011-05-28T01:37:47.050 に答える
0

命名スキームを確実に変更してください。item1、item2、item3 は、2 つまたは 3 つ以上のアイテムがある場合には適切なオプションではありません。あなたがしなければならないなら、ただ言ってください

NSMutableArray* floors = [NSMutableArray array];
[floors addObject:floor1];
[floors addObject:floor2];
[floors addObject:floor3];
... etc

No One In Particular が提案したコードの前。

于 2011-05-28T01:43:32.587 に答える