我正在爲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);
}