如何表达“如果对象相交'此数组中的任何对象'那么......”

时间:2012-07-18 19:51:19

标签: objective-c cocoa nsmutablearray

在学习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返回的值也是不可变的。”

所以我不确定如何解决它。

1 个答案:

答案 0 :(得分:1)

如果你想对platformArray数组中的每个对象进行检查,你可以使用现在for循环中的代码进行一些小修改:

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

如果您可以更具体地了解收到的SIGABRT(还有其他消息吗?),我们可以提供更多帮助。