2011-08-11 41 views

回答

4

你拿26圖像雪碧字母表(PNG圖片者優先),然後定義每個字符的夾具,每個字符(與vertexHelper的幫助,請參閱THIS鏈接,瞭解更多關於vertextHelper)像 '我' 這將是:

//OBSTACLE_Adjustments 
    { 
     CCSprite *sprite = [CCSprite spriteWithFile:@"I.png"]; 
     sprite.position = ccp(96,96); 
     sprite.tag = 2; 
     [self addChild:sprite]; 

     //SHAPE 1: 
     { 
      b2BodyDef bodyDefinition; 
      bodyDefinition.type = b2_dynamicBody; 
      bodyDefinition.position.Set(96/PTM_RATIO, 96/PTM_RATIO); 
      bodyDefinition.userData = sprite; 

      obstacle_AdjustmentsBody= world->CreateBody(&bodyDefinition); 

      // Create body shape 
      b2PolygonShape bodyShape; 
      //row 1, col 1 
      int num = 4; 
      b2Vec2 verts[] = { 
       b2Vec2(6.5f/PTM_RATIO, -25.0f/PTM_RATIO), 
       b2Vec2(6.5f/PTM_RATIO, 27.0f/PTM_RATIO), 
       b2Vec2(-7.5f/PTM_RATIO, 27.0f/PTM_RATIO), 
       b2Vec2(-7.5f/PTM_RATIO, -26.0f/PTM_RATIO) 
      }; 

      bodyShape.Set(verts, num); 

      // Create shape definition and add to body 
      b2FixtureDef bodyFixtureDefinition; 
      bodyFixtureDefinition.shape = &bodyShape; 
      bodyFixtureDefinition.density = 100.0f; 
      bodyFixtureDefinition.friction = 0.01f; 
      bodyFixtureDefinition.restitution = 0.50f;    
      obstacle_AdjustmentsFixture=obstacle_AdjustmentsBody->CreateFixture(&bodyFixtureDefinition);    
     } 
} 

這裏obstacle_AdjustmentsBodyb2Body,並且obstacle_AdjustmentsFixtureb2Fixture

這裏是形狀X:

//OBSTACLE_ALPHABATE 
    { 
     CCSprite *sprite = [CCSprite spriteWithFile:@"X.png"]; 
     sprite.position = ccp(96,96); 
     sprite.tag = 2; 
     [self addChild:sprite]; 

     //SHAPE FIRST LEG OF X: 
     { 
      b2BodyDef bodyDefinition; 
      bodyDefinition.type = b2_dynamicBody; 
      bodyDefinition.position.Set(96/PTM_RATIO, 96/PTM_RATIO); 
      bodyDefinition.userData = sprite; 

      obstacle_AdjustmentsBody= world->CreateBody(&bodyDefinition); 

      // Create body shape 
      b2PolygonShape bodyShape; 
      //row 1, col 1 
      int num = 4; 
      b2Vec2 verts[] = { 
       b2Vec2(108.0f/PTM_RATIO, -71.5f/PTM_RATIO), 
       b2Vec2(56.0f/PTM_RATIO, 2.5f/PTM_RATIO), 
       b2Vec2(47.0f/PTM_RATIO, -3.5f/PTM_RATIO), 
       b2Vec2(96.0f/PTM_RATIO, -75.5f/PTM_RATIO) 
      }; 

      bodyShape.Set(verts, num); 

      // Create shape definition and add to body 
      b2FixtureDef bodyFixtureDefinition; 
      bodyFixtureDefinition.shape = &bodyShape; 
      bodyFixtureDefinition.density = 100.0f; 
      bodyFixtureDefinition.friction = 0.01f; 
      bodyFixtureDefinition.restitution = 0.50f;    
      obstacle_AdjustmentsFixture=obstacle_AdjustmentsBody->CreateFixture(&bodyFixtureDefinition);    
     } 

     //SHAPE SECOND LEG OF X: 
     { 
      b2BodyDef bodyDefinition; 
      bodyDefinition.type = b2_dynamicBody; 
      bodyDefinition.position.Set(96/PTM_RATIO, 96/PTM_RATIO); 
      bodyDefinition.userData = sprite; 

      obstacle_AdjustmentsBody= world->CreateBody(&bodyDefinition); 

      // Create body shape 
      b2PolygonShape bodyShape; 
      //row 1, col 1 
      int num = 4; 
      b2Vec2 verts[] = { 
       b2Vec2(117.0f/PTM_RATIO, -4.5f/PTM_RATIO), 
       b2Vec2(113.0f/PTM_RATIO, -1.5f/PTM_RATIO), 
       b2Vec2(54.0f/PTM_RATIO, -51.5f/PTM_RATIO), 
       b2Vec2(61.0f/PTM_RATIO, -56.5f/PTM_RATIO) 
      }; 

      bodyShape.Set(verts, num); 

      // Create shape definition and add to body 
      b2FixtureDef bodyFixtureDefinition; 
      bodyFixtureDefinition.shape = &bodyShape; 
      bodyFixtureDefinition.density = 100.0f; 
      bodyFixtureDefinition.friction = 0.01f; 
      bodyFixtureDefinition.restitution = 0.50f;    
      obstacle_AdjustmentsFixture=obstacle_AdjustmentsBody->CreateFixture(&bodyFixtureDefinition);    
     } 
} 
+0

這是否工作凹面形狀(如字符'X')? – ohho

+0

哦,是的,這將適用於任何形狀的任何形狀。只需使用vertexHelper來定義形狀。 – rptwsthi

+0

謝謝!我看到'X'被分成兩條腿。連續凹形會發生什麼情況,比如'C',vertexHelper是否可以很好地處理這個問題? – ohho