0

XcodeとObjective-Cを学びながら、簡単なゲームに取り組んでいます。

画面の上部から落下してプラットフォームに着地するオブジェクトを取得しようとしています。すべてUIImageViewsである複数のプラットフォームがあります。

プラットフォームごとにifステートメントを入力するのではなく、オブジェクトが到達できるプラットフォームに配列を使用したいと思います。私は他の人の質問を見て回り、彼らが持っていたものに基づいてアイデアを試しています。これが私のゲームループ内でこれまでに持っているものです:

CGRect platformFrame = [(UIView *)[platformArray objectAtIndex:i] frame];
if (CGRectIntersectsRect(object.frame, platformFrame)) {
    objectVelocity.y += gravity.y;
    objectVelocity.x = 0;
}

これは、オブジェクトを配列に追加するために「viewDidLoad」にあるものです。

platformArray = [[NSMutableArray alloc] init];
[platformArray addObject:platform1];  
[platformArray addObject:platform2];
[platformArray addObject:platform3];

現時点では、これはエラーを返します:「スレッド1:プログラム受信信号:"SIGARBT"」。

これはNSMutableArrayを使用した結果であると読みました。

現在、エラーが原因で、コードが機能するかどうかわかりません。だから私はそれを行うためのより良い方法があるのか​​、それともSIGARBTエラーを回避する方法があるのだろうかと思っています。

どんな助けでも大歓迎です。

更新:迅速な返信をありがとう!うまくいけばうまくいきますが、残念ながらまだSIGARBTエラーが発生しているため、結果を確認できません。

このエラーの詳細については、アプリを実行しようとすると表示されますが、それまでは「問題なし」と表示されます。

エラーはここのmain.mに表示されます:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

'return'で始まる行にエラーが表示されます

NSMutableArrayを使用するとこれが発生する可能性があることを読みました。

「NSUserDefaultsから返される値は、可変オブジェクトを値として設定した場合でも不変です。」

だから私はそれを回避する方法がわかりません。

4

1 に答える 1

1

platformArray配列内のすべてのオブジェクトでそのチェックを行いたい場合は、forループ内のコードを少し変更して使用できます。

for(UIView * platform in platformArray) {
    if(CGRectIntersectsRect(object.frame, platform.frame)) {
        // Collision
        objectVelocity.y += gravity.y;
        objectVelocity.x = 0;
        break;
    }
}

受け取ったメッセージについて具体的に教えてSIGABRTいただければ (他に何かメッセージはありますか?)、より参考になります。

于 2012-07-18T20:00:08.923 に答える