1

我有一些地图(使用 Tiled QT 制作的瓷砖地图),我想根据这些地图的对象组创建一个 CGpoint **数组(我称它们为航点)。

每张地图都可以有几组我称之为路径的航路点。

//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);
4

2 回答 2

1

首先,你不能这样 NSLog CGPoint 因为它不是一个对象。 %@期望目标 c 对象向其发送description消息。

其次,您可以使用NSValue包装器,然后NSMutableArray像使用任何其他对象一样使用它。你有不想这样做的理由吗?您可以在其他数组中添加数组。

于 2012-07-27T10:15:45.547 回答
1

关于第一个问题:

y 值永远不会正确(x 值是正确的,我的 tilemap.tmx 也是正确的)

你有没有注意到,如果你从瓦片地图和 NSLog 中添加 y 值,它们总是加起来是 640?然后你最好检查 tilemap y 坐标是否从上到下与 CGPoint 的从下到上相反。然后你总是可以做 640 - y 来转换两个坐标系之间的 y 坐标。

于 2012-07-27T14:13:24.940 回答