数组作为函数参数不兼容

时间:2014-08-04 11:36:29

标签: objective-c sprite-kit

我已经定义了一个SKSPriteNode的2D数组。它被定义为:

   SKSpriteNode *arr [17][25];

现在我想制作测试此数组中的冲突的过程并将此数组作为参数传递。我该怎么做?我试过了:

   -(BOOL)checkCollisions:(SKSpriteNode*)array
   {
     ...
     return result;
   }

但是我称之为:

   BOOL collision = [self checkCollisions:arr];

XCode抗议(不兼容和ARC问题)。有人可以告诉我,如何正确地调用它(或如何定义SKSpriteNodes的二维数组)?

3 个答案:

答案 0 :(得分:2)

您应该考虑使用包含NSArrayNSArray个对象的SKSpriteNode对象。这样,您就不会对节点数量进行硬编码限制,ARC在确定如何保留和释放对象时也不会有任何问题。

不兼容性投诉是因为您的arr变量在旧式C中的类型为SKSpriteNode ***。如果编译器仍然抱怨它类似于(SKSpriteNode *)[][]。错误消息可能有助于计算传递二维C指针数组的语法。

答案 1 :(得分:0)

Objective C中的数组由NSArray对象表示。

-(BOOL)checkCollisions:(NSArray*)array
   {
     SKSpriteNode *node = array [x][y];
     ...
     return result;
   }

注意:使用容器访问([])可能会导致不必要的副作用。最好使用与NSArray相关的方法:

[array objectAtIndex:0];

对于多维数组,

[[array objectAtIndex:0] objectAtIndex:0];

请阅读使用Objective C here中的数组对象。

答案 2 :(得分:0)

指针和多维数组是不同的类型(至少在C中)。

尝试将完整数组(带边界)指定为方法

的参数