我有一些地图(使用Tiled QT制作的瓷砖地图),我想基于这些地图的对象组创建一个CGpoint **数组(我称之为Waypoints)。
每张地图都可以有几组我称之为路径的路标。
//Create the first dimension
int nbrOfPaths = [[self.tileMap objectGroups] count];
CGPoint **pathArray = malloc(nbrOfPaths * sizeof(CGPoint *));
然后是第二个维度
//Create the second dimension
int pathCounter = 0;
while ((path = [self.tileMap objectGroupNamed:[NSString stringWithFormat:@"Path%d", pathCounter]])) {
int nbrOfWpts = 0;
while ((waypoint = [path objectNamed:[NSString stringWithFormat:@"Wpt%d", nbrOfWpts]])) {
nbrOfWpts++;
}
pathArray[pathCounter] = malloc(nbrOfWpts * sizeof(CGPoint));
pathCounter++;
}
现在我想填写pathArray
//Fill the array
pathCounter = 0;
while ((path = [self.tileMap objectGroupNamed:[NSString stringWithFormat:@"Path%d", pathCounter]]))
{
int waypointCounter = 0;
//Get all the waypoints from the path
while ((waypoint = [path objectNamed:[NSString stringWithFormat:@"Wpt%d", waypointCounter]]))
{
pathArray[pathCounter][waypointCounter].x = [[waypoint valueForKey:@"x"] intValue];
pathArray[pathCounter][waypointCounter].y = [[waypoint valueForKey:@"y"] intValue];
NSLog(@"x : %f & y : %f",pathArray[pathCounter][waypointCounter].x,pathArray[pathCounter][waypointCounter].y);
waypointCounter++;
}
pathCounter++;
}
当我NSLog(@“%@”,pathArray)时,它显示整个pathArray将x和y。
但 2个问题:
y值永远不正确(x值正确且我的tilemap.tmx也正确)
<object name="Wpt0" x="-18" y="304"/> <-- I get x : -18 and y :336 with NSLog
<object name="Wpt1" x="111" y="304"/> <-- I get x : 111 and y :336
<object name="Wpt2" x="112" y="207"/> <-- I get x : 112 and y :433
我在NSLog的末尾得到一个EX_BAD_ACCESS
修改的 感谢关于CGPoint的NSLog(%@)。 但是,我用这一行得到y值(在丑陋的循环中):
NSLog(@"x : %f & y : %f",pathArray[pathCounter][waypointCounter].x,pathArray[pathCounter][waypointCounter].y);
答案 0 :(得分:1)
首先,你不能像那样使用NSLog CGPoint,因为它不是一个对象。 %@
期望一个目标c对象发送description
消息。
其次,您可以使用NSValue
包装,然后像使用任何其他对象一样使用NSMutableArray
。有没有理由你不想这样做?您可以像往常一样在其他数组中添加数组。