问题描述
|
我创建了一个游戏,其中的地板由高度不同的多个图像组成。(所以地板不是平坦的)
而不是打开一百万个if语句:
如果(CGRectIntersectsRect(ball1.frame,floor1.frame)){
}
如果(CGRectIntersectsRect(ball1.frame,floor2.frame)){
}
如果(CGRectIntersectsRect(ball1.frame,floor3.frame)){
}
如果(CGRectIntersectsRect(ball1.frame,floor4.frame)){
}
//等等...
。
有没有一种方法可以使用1 if语句检查冲突?所有的UIImageView地板块都被命名为“ floor1,floor2,floor3,floor4等等”
谢谢!
边注:
如果我想使用CGRectIntersect代码并旋转图像,我正在检查交叉点,因为它似乎仍然只检查图像帧的碰撞,因此无论旋转还是不碰撞在同一位置。我是否可以同时旋转框架以解决此问题,或者是否需要使用其他代码(如果是的话)?
解决方法
尽管我不太了解您的问题,但我想可以简化一下。
代替命名瓦片floor1,floor2,...,您应该使用数组。
这样,您可以将if语句折叠为3个语句:
for (int i = 0; i < num_tiles; i++) {
if (CGRectIntersectsRect(ball1.frame,floor[i].frame)) {
put code here
}
}
, 绝对更改您的命名方案,如果有2个或3个以上的项目,则item1,item2,item3永远不是正确的选择。如有必要,只需说
NSMutableArray* floors = [NSMutableArray array];
[floors addObject:floor1];
[floors addObject:floor2];
[floors addObject:floor3];
... etc
没有特别提示的代码之前。