мировое преимущество в cocos2d для iphone - PullRequest
0 голосов
/ 07 ноября 2011

Я установил границы игрового мира (cocos2d- b2world), например:

-(void)worldEdge
{
    CGSize winSize = [CCDirector sharedDirector].winSize;
    b2BodyDef groundBodyDef;
    groundBodyDef.position.Set(0,0);
    b2Body *groundBody = world->CreateBody(&groundBodyDef);
    b2PolygonShape groundBox;
    b2FixtureDef boxShapeDef;
    boxShapeDef.shape = &groundBox;
    groundBox.SetAsEdge(b2Vec2(0,0), b2Vec2(winSize.width/PTM_RATIO, 0));
    groundBody->CreateFixture(&boxShapeDef);
    groundBox.SetAsEdge(b2Vec2(0,0), b2Vec2(0, winSize.height/PTM_RATIO));
    groundBody->CreateFixture(&boxShapeDef);
    groundBox.SetAsEdge(b2Vec2(0, winSize.height+100/PTM_RATIO), b2Vec2(winSize.width+100/PTM_RATIO, winSize.height+100/PTM_RATIO));
    groundBody->CreateFixture(&boxShapeDef);
    groundBox.SetAsEdge(b2Vec2(winSize.width+100/PTM_RATIO, winSize.height+100/PTM_RATIO), b2Vec2(winSize.width/PTM_RATIO, 0));
    groundBody->CreateFixture(&boxShapeDef);
}

мой iphone находится в портретном режиме, и кое-что, у меня нет краев наверху, но на земле я делаю, и на левой стороне у меня есть, но на правой стороне я не делаю.

мне кажется, что я не понимаю что-то о краях мира, может кто-нибудь помочь мне изменить его так, чтобы дно было "свободным от края", но правое будет иметь край?

спасибо большое.

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

В cocos2d ccp (0,0) в левом нижнем углу.

 -(void)worldEdge
{
CGSize winSize = [CCDirector sharedDirector].winSize;
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0,0);
b2Body *groundBody = world->CreateBody(&groundBodyDef);
b2PolygonShape groundBox;
b2FixtureDef boxShapeDef;
boxShapeDef.shape = &groundBox;
groundBox.SetAsEdge(b2Vec2(0,winSize.height/PTM_RATIO), b2Vec2(winSize.width/PTM_RATIO, winSize.height/PTM_RATIO));//for Top edge
groundBody->CreateFixture(&boxShapeDef);
groundBox.SetAsEdge(b2Vec2(0,0), b2Vec2(0, winSize.height/PTM_RATIO));//for Left edge
groundBody->CreateFixture(&boxShapeDef);
groundBox.SetAsEdge(b2Vec2(winSize.width/PTM_RATIO, 0), b2Vec2(winSize.width/PTM_RATIO, winSize.height/PTM_RATIO));//for Right
groundBody->CreateFixture(&boxShapeDef);

groundBody->CreateFixture(&boxShapeDef);
}
0 голосов
/ 07 ноября 2011

Я получил это.как описал ответ выше меня, вот как я это делаю:

// bottom edge
groundBox.SetAsEdge(b2Vec2(0,0), b2Vec2(width,0));
groundBody->CreateFixture(&groundBox);

// top edge
groundBox.SetAsEdge(b2Vec2(0,height), b2Vec2(width,height));
groundBody->CreateFixture(&groundBox);

// left edge
groundBox.SetAsEdge(b2Vec2(0,height), b2Vec2(0,0));
groundBody->CreateFixture(&groundBox);

// right edge
groundBox.SetAsEdge(b2Vec2(width,height), b2Vec2(width,0));
groundBody->CreateFixture(&groundBox);

, когда на каждом ребре мы имеем: (от точки к точке), когда каждая точка является вектором.

...