2012-07-27 3 views
1

타일이있는 QT로 만든 타일 맵이 몇 개 있으며이 맵의 객체 그룹을 기반으로 CGpoint ** 배열을 만들려고합니다 (Waypoint라고 부름).동적 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++; 
} 

지금 내가 NSLog ("%의 @"@ pathArray가), 그것은 나를 보여줍니다 때 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++; 
} 

을 채우려

두 번째 차원에 전체 pathArray가 x와 y가됩니다.

그러나이 이 문제 :

  • 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 
    
  • 가 나는 EX_BAD_ACCESS을 얻을 결코 올바른 NSLog 끝 부분에서

EDIT CGPoint와 관련된 NSLog (% @)에 감사드립니다. 이 객체가 아니기 때문에 당신이 그런 NSLog CGPoint 수없는, 모든

NSLog(@"x : %f & y : %f",pathArray[pathCounter][waypointCounter].x,pathArray[pathCounter][waypointCounter].y); 
+1

올바른 코드입니다. 'NSLog'에 대한 정확한 호출을 보여줄 수 있습니까? '% @'지정자를 사용하여'pathArray'를 인쇄하려하지 않습니다. 맞습니까? 이 지정자는 객체를위한 것이기 때문에'pathArray'는 C 배열입니다. 그것을 채우기 위해 사용한 두 개의 중첩 된 루프 배열을 사용하여 이동해야합니다. – dasblinkenlight

답변

1

첫째 : 는 그러나, 나는 (추한 루프)이 라인 y 값을 얻는다. %@은 객관적인 c 개체가 description 메시지를 보낼 것으로 예상합니다.

둘째, NSValue 래퍼를 사용하고 다른 개체와 마찬가지로 NSMutableArray을 사용할 수 있습니다. 그 일을하고 싶지 않은 이유가 있습니까? 수행중인 다른 배열 안에 배열을 추가 할 수 있습니다. 첫 번째 문제에 관해서는

+0

NSLog (% @)를 삭제했지만 EXC_BAD_ACCESS는 삭제했지만 여전히이 y 값 문제는 삭제되었습니다. 사실, NSValue에 관한 : 나는 C++에서 왔고 여전히 NSMutableArray와 addObject 및 stuff 작업을 이해하지 못합니다. 2d/3d 어레이에 대해 멋지고 깨끗한 예제를 줄 수 있다면 =) 감사합니다! – Kalzem

+1

obj-c의 NSMutableArray는 push_back 대신 addObject를 사용하고 removeObject/removeObjectAtIndex, removeLastObject 등을 사용하는 팝업 대신 C++의 벡터와 같은 역할을합니다. – borrrden

+0

Ok, 일반 C 대신 Obj-C에서 수행하려고했습니다. 이것은 내가 얻은 것입니다 : http://stackoverflow.com/questions/11698682/how-to-dynamically-create-a-2d-nsmutablearray-with-loops – Kalzem

1

:

y 값이 결코 올바른는 (x 값은 정확하고 내 tilemap.tmx 너무 정확)

는 당신이를 추가하는 경우 것으로 나타났습니다 y 값은 타일 맵과 NSLog에서 항상 최대 640까지 추가됩니까? CGView의 bottom-to-top에 반대되는 타일 맵 y- 좌표가 top-to-bottom인지 확인하는 것이 좋습니다. 그런 다음 두 좌표계간에 y 좌표를 변환하려면 항상 640-y를 수행 할 수 있습니다.

+0

와아! 좋아! 사실 y는 tilemap.tmx에서 올바르게 읽혀집니다. 그것은 단지 NSLog going nut =) 그래서 나머지 코드에서 (y/y 좌표에 스프라이트를 추가하는 것과 같이) y 값을 사용하지 않으면 아무런 문제가 없어야합니다. – Kalzem

관련 문제