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

If you want to do that check with every object in your platformArray array, you can just use the code you have now inside a for loop with some minor modification:

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

If you can be more specific about the SIGABRT you receive (are there any other messages?), we can be more helpful.

于 2012-07-18T20:00:08.923 回答