Я пытаюсь создать мягкий шар с Cocos2d и Бурундуком (через SpaceManager), используя кучу канатов, соединенных вместе, а затем соединенных пружинами с центральным телом.
Что-то вроде этих примеров
Но для этого, я думаю, мне нужно сохранить все cpShapes в массиве после того, как я их создал, чтобы я могзатем переберите массив, чтобы связать их все вместе с ограничениями.
Однако, когда я пытаюсь поместить cpShapes в массив, я получаю сообщение об ошибке, сообщающее, что это «несовместимый тип указателя».Итак ... мне либо нужно использовать что-то кроме массива (я пробовал набор, который тоже не работал), либо мне нужно что-то сделать с формой, чтобы сделать его совместимым ... но что?ИЛИ мне нужен еще один подход.
Есть идеи?
Вот код, который должен быть актуален ...
- (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;
}