在学习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返回的值也是不可变的。”
所以我不确定如何解决它。
答案 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
(还有其他消息吗?),我们可以提供更多帮助。