Я смотрел на базовую программу Box2D, более конкретно этот.
Все довольно просто и имеет смысл, кроме этой строки:
Shape.SetAsBox((32.f/2)/SCALE, (32.f/2)/SCALE); // SCALE = 30
Теперь я знаю, что мы делим на SCALE
масштабировать 1m-> 30px, но почему 32.f делится на 2? Я не понимаю, почему мы делим на 2, если моя текстура блока составляет 32×32 пикселей.
от руководство :
groundBox.SetAsBox (50.0f, 10.0f);
Функция SetAsBox принимает полуширину и половину высоты (экстентов)
Это потому, что поле создано вокруг центра (0,0).
Так,
x = (32.f/2)/SCALE;
y = (32.f/2)/SCALE
SetAsBox(x,y);
создаст прямоугольник с углами в (-x, -y), (-x, y), (x, -y), (x, y), поэтому он будет иметь ожидаемый размер.
Если вы прочитали руководство раздела 2.2: http://www.box2d.org/manual.html#_Toc258082968
Функция SetAsBox принимает полуширину и половину высоты (экстенты)
Учитывайте протяженность («50 м в каждом направлении»), а не ширину («100 м в ширину»). Отсюда и фактор 2.