Библиотека Box2D

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

Важные ссылки:

  1. Официальный сайт
  2. Документация на русском
  3. Откуда скачать
  4. Box2D анатомия коллизий

Как начать пользоваться

Библиотека Box2D относится к тем немногим библиотекам, для которых уже есть готовый solution в Visual Studio. После распаковки скаченного архива, solution будет находится в папке <Папка_куда_распаковали>\Box2D\Build\vs2012. Solution содержит несколько проектов. Из них вам важны:

  • HelloWorld - тривиальный проект для ознакомления
  • Testbed - "песочница" - проект, предоставляющий функциональность по отрисовке и управлению созданным миром

Основные используемые классы описаны в документации (английской и русской)

Готовые примеры (миры) в Testbed

В папке Tests проекта Testbed находится множество уже готовых примеров: Вот некоторые из них, на которые стоит обратить внимание :

  1. Car.h - небольшая игра с машинкой, есть обработка нажатий клавиш, смещение камеры за объектом, работа с двигателем
  2. CollisionProcessing.h - есть обработка столкновений

Другие примеры тоже интересны - посмотрите :)

Как создать свое приложение в рамках Testbed

  1. В папке Tests проекта Testbed создать *.h файл
  2. В нем определить класс, который будет описывать поведение ваше мира, который должен быть наследником класса Test, и иметь статическую функцию Create(), которая возвращает экземпляр созданного класса. Например, если ваш класс называется MyTest, то фунция должна выглядеть так:

    static Test* Create()
    {
        return new MyTest;
    }
    
  3. В конструкторе своего класса описать создание мира

  4. Перекрыть нужные виртуальные методы предка. Некоторые важные методы, необходимые для решения большинства задач

    1. virtual void Step(Settings* settings) - вызывается на каждый шаг расчетов
    2. virtual void Keyboard(unsigned char key) - вызывается при нажатии клавиши
    3. virtual void KeyboardUp(unsigned char key) - вызывается при отжатии клавиши
    4. virtual void KeyboardUp(unsigned char key) - вызывается при отжатии клавиши
    5. virtual void MouseDown(const b2Vec2& p) - вызывается при нажатии мышкой
  5. Не забывайте, что не всю логику нужно писать прямо в этом классе!!! Некоторые части лучше уносить в отдельные классы, которыми основной класс будет пользоваться

  6. В файле Tests\TestEntries.cpp в инициализацию структуры TestEntry g_testEntries[] добавить запись о том, как создавать объект, реализованного вами класса. Пример:

    TestEntry g_testEntries[] =
    {
        {"MY_SUPER_TEST", MyTest::Create},
        {NULL, NULL}
    }
    
  7. Сделать проект Testbed основным, скомпилировать и запуститься. В combox'e Tests выберите название своего теста.