手伝ってくれますか。多角形 (さまざまな角度のビーム) を描画し、それにボックス 2D ボディを適用します。多角形の CCSprite を作成する方法を教えてください 例があれば助かります 乾杯
3583 次
3 に答える
2
ポリゴン ボディを作成します。
-(void) createDynamicPoly { b2BodyDef bodyDefPoly; bodyDefPoly.type = b2_dynamicBody; bodyDefPoly.position.Set(3.0f, 10.0f); b2Body *polyBody = world->CreateBody(&bodyDefPoly); int count = 8; b2Vec2 vertices[8]; vertices[0].Set(0.0f / PTM_RATIO,0.0f / PTM_RATIO); vertices[1].Set(48.0f/PTM_RATIO,0.0f/PTM_RATIO); vertices[2].Set(48.0f/PTM_RATIO,30.0f/PTM_RATIO); vertices[3].Set(42.0f/PTM_RATIO,30.0f/PTM_RATIO); vertices[4].Set(30.0f/PTM_RATIO,18.0f/PTM_RATIO); vertices[5].Set(18.0f/PTM_RATIO,12.0f/PTM_RATIO); vertices[6].Set(6.0f/PTM_RATIO,18.0f/PTM_RATIO); vertices[7].Set(0.0f/PTM_RATIO,30.0f/PTM_RATIO); b2PolygonShape polygon; polygon.Set(vertices, count); b2FixtureDef fixtureDefPoly; fixtureDefPoly.shape = &polygon; fixtureDefPoly.density = 1.0f; fixtureDefPoly.friction = 0.3f; polyBody->CreateFixture(&fixtureDefPoly); }
スプライトを作成する
Fixture と UserData を介してスプライトを Polygon ボディにアタッチします。
fixtureDefPoly.SetUserData() = spriteObject; b2Fixture *fixture; fixture = circleBody->CreateFixture(&fixtureDefPoly); fixture->SetUserData(@"spriteObject");
次に、更新メソッドでスプライトをボディに繰り返します。
于 2011-03-23T12:44:53.100 に答える
0
最も簡単な方法は、イメージ エディター (ペイントやフォトショップなど) を開いて、必要なイメージを作成することです。プログラムで使用します。
また、cocos2d box2d テンプレートを使用して xcode アプリケーションを作成するときに、helloWorld シーンがあります。テクスチャ付きの正方形のセットを作成します。
于 2011-03-19T08:19:52.097 に答える
0
CGPoint startPt = edge.start ;
CGPoint endpt = edge.end ;
//length of the stick body
float len = abs(ccpDistance(startPt, endpt))/PTM_RATIO;
//to calculate the angle and position of the body.
float dx = endpt.x-startPt.x;
float dy = endpt.y-startPt.y;
//position of the body
float xPos = startPt.x+dx/2.0f;
float yPos = startPt.y+dy/2.0f;
//width of the body.
float width = 1.0f/PTM_RATIO;
b2BodyDef bodyDef;
bodyDef.position.Set(xPos/PTM_RATIO, yPos/PTM_RATIO);
bodyDef.angle = atan(dy/dx);
NSLog([NSString stringWithFormat:@"Setting angle %f",bodyDef.angle]);
CCSprite *sp = [CCSprite spriteWithFile:@"material-wood.png" rect:CGRectMake(0, 0, 12, 12)];
//TODO: fix shape
[self addChild:sp z:1 ];
bodyDef.userData = sp;
bodyDef.type = b2_dynamicBody;
b2Body* body = world->CreateBody(&bodyDef);
b2PolygonShape shape;
b2Vec2 rectangle1_vertices[4];
rectangle1_vertices[0].Set(-len/2, -width/2);
rectangle1_vertices[1].Set(len/2, -width/2);
rectangle1_vertices[2].Set(len/2, width/2);
rectangle1_vertices[3].Set(-len/2, width/2);
shape.Set(rectangle1_vertices, 4);
b2FixtureDef fd;
fd.shape = &shape;
fd.density = 1.0f;
fd.friction = 0.300000f;
fd.restitution = 0.600000f;
body->CreateFixture(&fd);
于 2011-03-23T18:53:56.343 に答える