Box2D зачем делить на 2?

Я смотрел на базовую программу Box2D, более конкретно этот.

Все довольно просто и имеет смысл, кроме этой строки:

Shape.SetAsBox((32.f/2)/SCALE, (32.f/2)/SCALE);   // SCALE = 30

Теперь я знаю, что мы делим на SCALE масштабировать 1m-> 30px, но почему 32.f делится на 2? Я не понимаю, почему мы делим на 2, если моя текстура блока составляет 32×32 пикселей.

2

Решение

от руководство :

groundBox.SetAsBox (50.0f, 10.0f);

Функция SetAsBox принимает полуширину и половину высоты (экстентов)

3

Другие решения

Это потому, что поле создано вокруг центра (0,0).

Так,

x = (32.f/2)/SCALE;
y = (32.f/2)/SCALE
SetAsBox(x,y);

создаст прямоугольник с углами в (-x, -y), (-x, y), (x, -y), (x, y), поэтому он будет иметь ожидаемый размер.

1

Если вы прочитали руководство раздела 2.2: http://www.box2d.org/manual.html#_Toc258082968

Функция SetAsBox принимает полуширину и половину высоты (экстенты)

Учитывайте протяженность («50 м в каждом направлении»), а не ширину («100 м в ширину»). Отсюда и фактор 2.

1