我正在为iPhone开发一款已经投入使用约一个月的游戏。我有不同颜色的球从屏幕顶部落下,底部有一个密封圈,玩家可以控制它来抓住它们。因为他们应该创建一个随每个新球一起增长的堆栈,类似于Scoops!目前在应用商店中。我有一个身体和形状,围绕着每个新球形精灵,他们受到重力的影响。但是密封不能受重力的影响,但是我需要它通过collsion检测来检测第一个球和每个后续球何时击中并且被添加到堆叠中。我曾尝试过应用力量,并施加了一种抵抗重力的力量,这种力量直到一个球与密封件发生碰撞,然后才从屏幕上消失。是否有人可以帮助...我的代码是farly长,但我可以在下面的问题张贴的对象主要部分:cocos2d和花栗鼠制作机构忽略重力
-(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);
}