0
好了,所以我使用的是含有位置结构C风格的二维数组创建地图:空调风格二维数组没有保留价值
typedef struct{
int x;
int y;
} posn;
我上传的价值观罚款并打印出来,以确保值是正确的。 2d数组作为实例变量存储在我的类中。
在我的下一个函数中,我首先打印数组以确保它是相同的,但事实并非如此。 值完全不同,数组甚至缩短。任何人都可以告诉我为什么我得到这个问题。我使用的是structs和c风格的数组,因为我设计的是一个游戏,我想他们会比NSMutableArray更快。
这是我的填充阵列
mapa_camino = (posn *)malloc(w * h * sizeof(posn));
int i, j = 0;
for (i = 0; i < w; i++){
for (j = 0; j < h; j++){
SKNode *act;
act = [self.main_view nodeAtPoint:CGPointMake(i-algorimo_compensado.x, j-algorimo_compensado.y)];
if([act isKindOfClass:[BasicActor class]] && ![act isKindOfClass:[CMActor class]]){
//crea pt
posn pt = {.x = i,
.y = j,
.ocupado = YES,
.visitado = NO};
//fija posicion actual como pt
*(mapa_camino + i*h + j) = pt;
}else{
posn pt = {.x = i,
.y = j,
.ocupado = NO,
.visitado = NO};
*(mapa_camino + i*h + j) = pt;
}
}
}
这是我的打印:
- (NSMutableArray*) printtwodarray:(posn*)matriz{
int array_w = self.frame.size.width;
int array_h = self.frame.size.height;
NSMutableArray* regresa_matriz = [[NSMutableArray alloc] initWithCapacity:array_w];
for(int i=0;i<array_w;i++){
[regresa_matriz addObject:[[NSMutableArray alloc] initWithCapacity:array_h]];
for(int j=0;j<array_h;j++){
posn *pt = (matriz + i*array_h + j);
[[regresa_matriz objectAtIndex:i] insertObject:[[Posn alloc] initWithX:pt->x Y:pt->y H:pt->h G:pt->g Ocupado:pt->ocupado Goal:pt->is_goal] atIndex:j];
}
}
return regresa_matriz;
}
你可以发布你如何填充数组,以及如何使用它进行打印? – Glorfindel
你是否在你的函数中创建一个C数组,然后试图将它作为返回值传递出函数? –
不,我将数组存储为一个实例变量,然后在我的后续函数中访问它。 –