Я создаю игру для iPhone, которая находится в разработке около месяца.У меня есть разноцветные шары, которые падают с верхней части экрана, и печать внизу, которую игрок контролирует, чтобы попытаться поймать их.Так как они должны создавать стек, который растет с каждым новым мячом, как в Scoops!в магазине приложений в настоящее время.У меня есть тело и форма, которые окружают каждый новый шаровой спрайт, на них влияет гравитация.Но гравитация не может повлиять на печать, но мне нужно, чтобы она обнаружила столкновение, чтобы определить, когда первый шар и каждый последующий шар попадают в него и добавляются в стек.Я попробовал applyForce и применил силу, которая противодействует гравитации, это работает, пока шар не столкнется с печатью, а затем не упадет с экрана.Может кто-нибудь, пожалуйста, помогите ... Мой код очень длинный, но я могу опубликовать основные части для рассматриваемого объекта ниже:
-(void) AddSealSprite {
Seal = [CCSprite spriteWithFile:@"Seal2Inverted.png"];
Seal.position = ccp(160, 0);
[self addChild: Seal z:1];
Seal.tag = 2;
cpBody *SealBody = cpBodyNew(1, INFINITY);
SealBody->p = cpv(160, 0);
cpSpaceAddBody(space, SealBody);
//Creates Seal shape
int NumberOfVerts = 4;
CGPoint SealVerts[] = {
ccp(-60, -60),
ccp(60, -60),
ccp(60, 60),
ccp(-60, 60),
};
cpShape *SealShape = cpCircleShapeNew(SealBody, 100, cpvzero);
SealShape->e = 0.5;
SealShape->u = 1.0;
SealShape->data = Seal;
cpSpaceAddShape(space, SealShape);
// here is my gravity offset...
cpBodyApplyForce(SealBody, cpv(0, NumberOfBallsInStack * 200), cpvzero);
}
и метод спрайта шара
-(void) addNewSpriteX: (float)x y:(float)y
{
int posx, posy;
CCSpriteBatchNode *batch = (CCSpriteBatchNode*) [self getChildByTag:kTagBatchNode];
posy = 0;
//New Random sprite code
switch (arc4random() % 5) {
case 0:
posx = 0;
break;
case 1:
posx = 60;
break;
case 2:
posx = 120;
break;
case 3:
posx = 180;
break;
case 4:
posx = 240;
break;
}
CCSprite *sprite = [CCSprite spriteWithBatchNode:batch rect:CGRectMake(posx, posy, 60, 60)];
[batch addChild: sprite];
sprite.position = ccp(x,y);
int num = 4;
CGPoint verts[] = {
ccp(-30, -30),
ccp(-30, 30),
ccp( 30, 30),
ccp( 30,-30),
};
cpBody *body = cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, CGPointZero));
// TIP:
// since v0.7.1 you can assign CGPoint to chipmunk instead of cpVect.
// cpVect == CGPoint
body->p = ccp(x, y);
cpSpaceAddBody(space, body);
cpShape* shape = cpPolyShapeNew(body, num, verts, CGPointZero);
shape->e = 0.5f; shape->u = 0.5f;
shape->data = sprite;
cpSpaceAddShape(space, shape);
}