Cocos2d рисует многоугольник, используя CCSprite - PullRequest
2 голосов
/ 19 марта 2011

Можете ли вы помочь. Хочу нарисовать многоугольник (балки под разными углами) и наложить на него прямоугольник 2d body. Можете ли вы дать мне знать, как создать CCSprite с многоугольником Любые примеры помогут Приветствия

Ответы [ 3 ]

2 голосов
/ 23 марта 2011
  1. Создать тело многоугольника.

    -(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. Создать свой спрайт

  3. Присоединить свой спрайт к телу многоугольникачерез Fixture и UserData

    fixtureDefPoly.SetUserData() = spriteObject;  
    b2Fixture *fixture;  
    fixture = circleBody->CreateFixture(&fixtureDefPoly);  
    fixture->SetUserData(@"spriteObject");  
    
  4. Затем итерируйте спрайт в теле в вашем методе обновления.

0 голосов
/ 23 марта 2011
    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);
0 голосов
/ 19 марта 2011

Самый простой способ - открыть редактор изображений (например, рисовать или фотошоп) и создать нужное изображение.Используйте его в своей программе.

Также есть сцена helloWorld при создании приложения xcode с использованием шаблона cocos2d box2d.Создает набор квадратов с текстурой.

...