如何创建动态CGPoint **数组

时间:2012-07-27 10:05:36

标签: ios cocos2d-iphone cgpoint

我有一些地图(使用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);

1 个答案:

答案 0 :(得分:1)

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

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