2010-07-07 2 views
1

나는 Cocos2d와 Chipmunk (SpaceManager를 통해)로 squishy 공을 만들려고 노력하고 있습니다. 여러 장의 직사각형을 함께 묶은 다음 스프링으로 중앙 몸체에 합칩니다. 어떻게 SpaceManager cpShape를 배열과 같은 형태로 저장할 수 있습니까?

Something like these examples

그러나이 작업을 수행하기 위해

, 내가 내가 내가 다음 배열을 통해 루프 제약과 함께 그들을 모두 연결 수를 생성 한 후 배열에있는 모든 cpShapes를 저장할 필요가 있다고 생각.

그러나 배열에 cpShapes를 넣으려고하면 "호환되지 않는 포인터 유형"이라는 오류가 발생합니다. 그래서 ... 나는 어레이가 아닌 다른 것을 사용해야한다. (세트를 시도해 보았는데, 그 중 하나도 작동하지 않았다.) 또는 호환이 가능하도록 모양에 뭔가를 할 필요가있다. 아니면 다른 접근이 필요해.

아이디어가 있으십니까?

- (void)addObject:(id)anObject 

: 여기

- (id) init 
{ 

    if ((self = [super init])) { 

     SpaceManager * spaceMgr = [[SpaceManager alloc] init]; 
     [spaceMgr addWindowContainmentWithFriction:1.0 elasticity:1.0 inset:cpv(5, 5)]; 

      // This is a layer that draws all the chipmunk shapes 
     ChipmunkDrawingLayer *debug = [[ChipmunkDrawingLayer node] initWithSpace:spaceMgr.space]; 
     [self addChild:debug]; 

     int ballPeices = 10; // the number of peices I want my ball to be composed of 
     int ballRadius = 100; 
     float circum = M_PI * (ballRadius * 2); 

     float peiceSize = circum/ballPeices; 
     float angleIncrement = 360/ballPeices; 

     CGPoint origin = ccp(240, 160); 
     float currentAngleIncrement = 0; 

      NSMutableArray *peiceArray = [NSMutableArray arrayWithCapacity:ballPeices]; 

     for (int i = 0; i < ballPeices; i++) { 

      float angleIncrementInRadians = CC_DEGREES_TO_RADIANS(currentAngleIncrement); 

      float xp = origin.x + ballRadius * cos(angleIncrementInRadians); 
      float yp = origin.y + ballRadius * sin(angleIncrementInRadians); 

        // This is wrong, I need to figure out what's going on here. 
      float peiceRotation = atan2(origin.y - yp, origin.x - xp); 

      cpShape *currentPeice = [spaceMgr addRectAt:ccp(xp, yp) mass:1 width:peiceSize height:10 rotation:peiceRotation]; 

      currentAngleIncrement += angleIncrement; 

        [peiceArray addObject:currentPeice]; //!! incompatible pointer type 

     } 



     spaceMgr.constantDt = 0.9/55.0; 
     spaceMgr.gravity = ccp(0,-980); 
     spaceMgr.damping = 1.0; 

    } 

    return self; 

} 
+0

어디에서 스프링 제약 조건을 추가합니까? 나는 그것을 보지 않는다 – slf

+0

나는 아직까지 그것을 얻지 않았다. 나는 그들이 만들어지면 모양에 접근 할 수있는 방법이 필요하다고 생각한다. 그렇게하기 위해서, 나는 그것들을 배열 등으로 가져와야합니다. – gargantuan

답변

0

비상 용성 포인터 유형 설명 :

[NSMutableArray addObject] 같은 정의 쉽습니다 ... 코드는 지금까지 관련되어야한다입니다 그렇다면 id은 무엇입니까? 좋은 질문입니다! Objective-C가 여전히 핵심이라는 것을 기억하십시오. 큰 년대 Objective-C Programming Guide

typedef struct objc_object { 
    Class isa; 
} *id; 

에 따르면, 지금 우리는 약 *id하지만 id 자체에 대한 무엇을 알아? 이것이 메소드 서명에서 참조되는 것입니다. 이를 위해, 우리는 분명히 cpSpace*가 맞지 않는 objc.h

typedef id (*IMP)(id, SEL, ...); 

보고, 그래서 당신이 메시지를 사용하여 NSMutableArray에 사람들을 넣어하려고하면 호환되지 않는 포인터 타입을 점점됩니다.

+0

배열에 넣을 수 없다면 무엇을 넣을 수 있습니까? 다른 객체를 배열에 넣을 수 있습니다. – gargantuan

+0

'NSObject'에서 상속받은 내용 안에 넣을 수 있습니다. 그런 다음 NSMutableArray에 저장하면됩니다. 가끔은이 "권투"라고도합니다 – slf

+0

또한, 그냥 평범한 오래된 C 배열을 유지할 수 – slf

관련 문제