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から返される値は、可変オブジェクトを値として設定した場合でも不変です。」
だから私はそれを回避する方法がわかりません。