Box 2D - есть ли способ переместить землю b2EdgeShape вверх - PullRequest
1 голос
/ 04 апреля 2011

Я работаю над игрой для iPhone, а земля представляет собой длинный повторяющийся прямоугольный спрайтовый объект, который простирается примерно на 30 пикселей над нижней частью экрана.Я пытаюсь выровнять форму моего края земли на 30 пикселей, чтобы, когда спрайт игрока приземлился на землю от прыжка, он приземлился поверх изображения земли.Когда я попытался добавить следующий код, это не сработало:

b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0, 30/PTM_RATIO);

b2Body *groundBody=world->CreateBody(&groundBodyDef);

b2EdgeShape groundLine;
groundLine.Set(b2Vec2(0, 30/PTM_RATIO), b2Vec2(screenSize.width/PTM_RATIO, 30/PTM_RATIO));
groundBody->CreateFixture(&groundLine, 0);

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

1 Ответ

4 голосов
/ 17 июня 2011

Когда вы устанавливаете положение фигур (например, GroundLine.Set () в вашем примере), вы устанавливаете положение относительно положения тела , к которому оно будет прикреплено.Таким образом, ваше тело уже при y = 30, тогда ваша фигура будет еще на 30 выше.

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

...