の配列を作成しています...私は似たタイプの複数のボールを作成したいと、彼らはまた、それらの間の自己衝突しなければならない。..私は、画面の周りBOX2D体と移動でボールを持ってBOX2D本体
コードは現在使用中です
ballcount = [[levelData objectForKey:@"ballcount"]intValue] ;
ballarray = [[NSMutableArray arrayWithCapacity:ballcount]init] ;
for (int j=0; j<ballcount; j++) {
ball = [CCSprite spriteWithFile:@"ball.png"];
[ballarray insertObject:ball atIndex:j];
[self createBallBoundingBox:(CCSprite *)[ballarray objectAtIndex:j]];
[[ballarray objectAtIndex:j]setPosition:ccp(arc4random() % 480 , arc4random() % 320)];
[self addChild:[ballarray objectAtIndex:j]];
}
実行時にスプライトが1つしか表示されません。唯一の1つのボールが
おかげ
iが動作するように上記のコードを持っているが、今私はダニの動きに問題が生じていますOKがあるときに任意の提案私が間違って何をやっている...それは完璧に動作します方法... BOX2D形状は動いているが、CCSprite形状は、ここでBOX2Dボディに取り付けたばかりされていないことは、私のcreateBoundingBox定義
world->Step(dt, 10, 10);
for(b2Body *b = world->GetBodyList(); b; b=b->GetNext()) {
if (b->GetUserData() != NULL) {
CCSprite *sprite = (CCSprite *)b->GetUserData();
if ([sprite isKindOfClass:[Ball class]])
{
b2Vec2 Vel = b->GetLinearVelocity();
float32 angle = atan2(Vel.y, Vel.x);
angle += -M_PI/2;
b->SetTransform(b->GetPosition(),angle);
sprite.position = ccp(b->GetPosition().x * PTM_RATIO,
b->GetPosition().y * PTM_RATIO);
sprite.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
}
[OK]をみんなここに私のコードです
-(void)createBallBoundingBox:(Ball *)ballSprite{
b2BodyDef BallBodyDef;
ballBodyDef.type = b2_dynamicBody;
ballBodyDef.position.Set(ballSprite.position.x/PTM_RATIO, ballSprite.position.y/PTM_RATIO);
ballBodyDef.userData = ballSprite;
ballBody = world->CreateBody(&ballBodyDef);
/// test circle shape on ballbody
b2CircleShape BallCircleShape;
BallCircleShape.m_radius = 10/PTM_RATIO;
// Create shape
/*
b2PolygonShape ballShape;
int num = 7;
b2Vec2 verts[] = {
b2Vec2(0.0f/PTM_RATIO, 19.2f/PTM_RATIO),
b2Vec2(-10.7f/PTM_RATIO, 15.2f/PTM_RATIO),
b2Vec2(-6.7f/PTM_RATIO, -3.2f/PTM_RATIO),
b2Vec2(-1.7f/PTM_RATIO, -18.0f/PTM_RATIO),
b2Vec2(7.7f/PTM_RATIO, 0.5f/PTM_RATIO),
b2Vec2(10.5f/PTM_RATIO, 14.7f/PTM_RATIO),
b2Vec2(0.2f/PTM_RATIO, 19.0f/PTM_RATIO)
};
ballShape.Set(verts,num);
*/
// Create shape definition and add to body
b2FixtureDef ballFixtureDef;
ballFixtureDef.shape = &ballCircleShape;
ballFixtureDef.density = 1.0f;
ballFixtureDef.friction = 0.0f;
ballFixtureDef.restitution = 1.0f;
ballFixture = ballBody->CreateFixture(&ballFixtureDef);
b2Vec2 direction(5,2);
direction.Normalize();
float force = 1.0f;
b2Vec2 position = ballBody->GetPosition();
//Apply linear velocity
ballBody->ApplyLinearImpulse(force*direction,ballBody->GetPosition());
b2Vec2 Vel = ballBody->GetLinearVelocity();
float32 angle = atan2(Vel.y, Vel.x);
angle += -M_PI/2;
ballBody->SetTransform(ballBody->GetPosition(),angle);
}
私に教えてくれたコードが表示されない場合は、あなたのメソッド内
おかげでたくさんの男
私はまだエラーは見つかりませんでしたが、「ballarray objectAtIndex:j」の代わりに「ball」を3回試してみてください。 – JeanLuc
私はCCSpriteの配列を取得することができました。私の次の問題は、チックでシミュレーションする方法です:方法? –
「ワンボール」問題をどう解決しましたか?あなたは私たちとこれを共有する必要があります。これは将来の読者に役立ちます。 – JeanLuc