1

いくつかのマップ (Tiled QT で作成されたタイルマップ) があり、それらのマップのオブジェクト グループに基づいて CGpoint ** 配列を作成したいと考えています (ウェイポイントと呼びます)。

各マップには、パスと呼ばれるいくつかのウェイポイントのセットを含めることができます。

//Create the first dimension
int nbrOfPaths = [[self.tileMap objectGroups] count];
CGPoint **pathArray = malloc(nbrOfPaths * sizeof(CGPoint *));

次に、2 番目の次元について

//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

最初の問題について:

y値は決して正しくありません(x値は正しく、私のtilemap.tmxも正しいです)

タイルマップとNSLogからy値を追加すると、常に640になることに気づきましたか?次に、CGPointの下から上ではなく、タイルマップのy座標が上から下であるかどうかを確認することをお勧めします。次に、いつでも640-yを実行して、2つの座標系間のy座標を変換できます。

于 2012-07-27T14:13:24.940 に答える
1

まず、オブジェクトではないため、そのような NSLog CGPoint はできません。 %@目的の c オブジェクトがdescriptionメッセージを送信することを期待します。

次に、NSValueラッパーを使用NSMutableArrayして、他のオブジェクトと同じように使用できます。それをしたくない理由はありますか?行っているように、他の配列内に配列を追加できます。

于 2012-07-27T10:15:45.547 に答える