Как определить спрайты неправильной формы в физическом мире Cocos2D - PullRequest
0 голосов
/ 11 августа 2011

Я хотел бы создать спрайты из 26 английских символов и позволить им сталкиваться друг с другом внутри фрейма (например, как X и E на диаграмме ниже).

enter image description here

Каков рекомендуемый способ создания 26 фигур?

1 Ответ

4 голосов
/ 11 августа 2011

Вы берете 26 изображений Sprite для каждого символа алфавита (предпочтение будет иметь изображение .png), затем определяете фиксацию каждого символа (с помощью vertexHelper. См. THIS Ссылка для получения дополнительной информации о vertextHelper ), как для 'I' это будет:

 //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_AdjustmentsBody равно b2Body, а obstacle_AdjustmentsFixture равно b2Fixture.

ЗДЕСЬ ФОРМА 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);            
        }
}
...