Search code examples
cocos2d-iphonepolygonbox2dccsprite

Cocos2d draw a polygon using CCSprite


Can you help. Want to draw a polygon (beams at different angles) and apply box 2d body to it. Can you please let me know how to create a CCSprite with a polygon shape Any examples would help Cheers


Solution

    1. Create Polygon body.

      -(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);    
      }
      
    2. Create your sprite

    3. Attach your sprite to the Polygon body via Fixture and UserData

      fixtureDefPoly.SetUserData() = spriteObject;  
      b2Fixture *fixture;  
      fixture = circleBody->CreateFixture(&fixtureDefPoly);  
      fixture->SetUserData(@"spriteObject");  
      
    4. Then Iterate the sprite to the body in your update method.