проблема с cocos2d setasedge - PullRequest
       10

проблема с cocos2d setasedge

3 голосов
/ 19 января 2012

В версии cocos2d v1.0.1

        groundBox.SetAsEdge(left,right);

Он не должен использовать SetAsEdge как ошибку, сообщающую, что метод не существует, что имеет смысл, так как он был удален в предыдущей версии Однако я не уверен, как это сделать, так как он не создает прямоугольник, и я не уверен, что он создает несколько строк с использованием массива вершин (из моего понимания), как мне это сделать, используя новый

- (void)createGroundEdgesWithVerts:(b2Vec2 *)verts numVerts:(int)num 
                   spriteFrameName:(NSString *)spriteFrameName {
    CCSprite *ground = 
    [CCSprite spriteWithSpriteFrameName:spriteFrameName];
    ground.position = ccp(groundMaxX+ground.contentSize.width/2, 
                          ground.contentSize.height/2);
    [groundSpriteBatchNode addChild:ground];

    b2PolygonShape groundShape;  

    b2FixtureDef groundFixtureDef;
    groundFixtureDef.shape = &groundShape;
    groundFixtureDef.density = 0.0;

    // Define the ground box shape.
    b2PolygonShape groundBox;       

    for(int i = 0; i < num - 1; ++i) {
        b2Vec2 offset = b2Vec2(groundMaxX/PTM_RATIO + 
                               ground.contentSize.width/2/PTM_RATIO, 
                               ground.contentSize.height/2/PTM_RATIO);
        b2Vec2 left = verts[i] + offset;
        b2Vec2 right = verts[i+1] + offset;

        groundShape.SetAsEdge(left,right);

        groundBody->CreateFixture(&groundFixtureDef);    
    }

    groundMaxX += ground.contentSize.width;
}

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Вы можете проверить, как это делает новый пример проекта Cocos2D + Box2D.

Вот как я могу создать коробку размером с экран в Kobold2D :

    // for the screenBorder body we'll need these values
    CGSize screenSize = [CCDirector sharedDirector].winSize;
    float widthInMeters = screenSize.width / PTM_RATIO;
    float heightInMeters = screenSize.height / PTM_RATIO;
    b2Vec2 lowerLeftCorner = b2Vec2(0, 0);
    b2Vec2 lowerRightCorner = b2Vec2(widthInMeters, 0);
    b2Vec2 upperLeftCorner = b2Vec2(0, heightInMeters);
    b2Vec2 upperRightCorner = b2Vec2(widthInMeters, heightInMeters);

    // Define the static container body, which will provide the collisions at screen borders.
    b2BodyDef screenBorderDef;
    screenBorderDef.position.Set(0, 0);
    b2Body* screenBorderBody = world->CreateBody(&screenBorderDef);
    b2EdgeShape screenBorderShape;

    // Create fixtures for the four borders (the border shape is re-used)
    screenBorderShape.Set(lowerLeftCorner, lowerRightCorner);
    screenBorderBody->CreateFixture(&screenBorderShape, 0);
    screenBorderShape.Set(lowerRightCorner, upperRightCorner);
    screenBorderBody->CreateFixture(&screenBorderShape, 0);
    screenBorderShape.Set(upperRightCorner, upperLeftCorner);
    screenBorderBody->CreateFixture(&screenBorderShape, 0);
    screenBorderShape.Set(upperLeftCorner, lowerLeftCorner);
    screenBorderBody->CreateFixture(&screenBorderShape, 0);
2 голосов
/ 19 января 2012

Это box2d.В более новой версии я считаю, что есть класс с именем b2EdgeShape, и он имеет метод с именем Set (). Вы можете использовать его вместо формы многоугольника и его устаревшего метода setEdge.

http://www.box2d.org/manual.html

См. Раздел 4.5

...