Суббота, 09 Ноября 2024, 12:32

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Box2D 2.1a Tutorial – Part 3 (World)
vovnetДата: Вторник, 26 Июня 2012, 20:29 | Сообщение # 1
почетный гость
Сейчас нет на сайте

Предыдущий урок:
Part2
Box2D 2.1a Tutorial – Part 3 (World)


В этом уроке мы подробнее поговорим о мире Box2D.
Этот урок будет небольшим, по-большей части для закрепления материала и более полного представления о мире в Box2D.

Мир в Box2D является центральной частью движка — в нем создаются объекты, которые тут же и взаимодействуют друг с другом. Как и в реальном мире, мир Box2D имеет гравитацию. Итак, давайте рассмотрим создание объекта мира.

Для создания мира необходимо создать объект типа b2World в конструктор которого необходимо передать вектор гравитации и булево значение, которое разрешит (true) или запретит (false) телам засыпать. Рассмотрим эти параметры подробнее:

Вектор гравитации.

Его можно создать при помощи объекта типа b2Vec2, в конструктор которого необходимо передать два значения:
1. сила гравитации по оси Х;
2. сила гравитации по оси Y.

Code
var gravity:b2Vec2 = new b2Vec2(0, 10);

Хочу добавить, что необязательно создавать объект гравитации, можно просто воспользоваться статическим методом b2Vec2.Make().

Code
var gravity:b2Vec2 = b2Vec2.Make(0, 10);


Засыпание тел.
Мир постоянно моделирует поведение активных объектов, которые в нем находятся, а это использование ресурсов центрального процессора. Для того, чтобы сэкономить ресурсы компьютера, в Box2D реализована возможность «засыпания» объектов, то есть мир не обрабатывает объекты которые находятся в покое. Не рекомендуется отключать (false) засыпание тел.

Создание мира.

Code
var world:b2World = new b2World(gravity, true);

Таким образом мы создали мир.
Теперь необходимо запустить непрерывный цикл моделирования физики тел. Для этого в нашем мире предусмотрен метод Step(), который с каждым своим вызовом будет моделировать взаимодействие объектов в мире. А чтобы этот метод вызывался постоянно обычно используют событие ENTER_FRAME по которому и происходит отработка Step().

Пример:

Code
addEventListener(Event.ENTER_FRAME, update);

public function update(e:Event):void
{
      var timeStep:Number = 1 / 30;
      var velocityIterations:int = 6;
      var positionIterations:int = 2;
       
      _world.Step(timeStep, velocityIterations, positionIterations);
       
      // в версии 2.1 мы должны очистить силы
      _world.ClearForces();
      // отрисовываем
      world.DrawDebugData();
}


Теперь можем подробнее рассмотреть методы объекта b2World:

Step(dt:Number, velocityIterations:int, positionIterations:int) — моделирование физики в текущий момент.
Принимает следующие параметры:
- dt:Number – время необходимое для моделирования физики. Чем это значение меньше, тем быстрее будет идти жизнь в мире. Обычно в играх используют значение 1/60.
- velocityIterations:int – количество итераций для расчета столкновения тел. Чем больше значение, тем точнее просчитываются столкновения тел, но это сказывается на скорости работы приложения. Рекомендуемое значение 10.
- positionIteration:int – количество итераций для расчета позиции тел.

ClearForces():void - Вызовите после шага обновления мира World.Step(), чтобы очистить мир от действующих на него сил.
CreateBody(def:b2BodyDef):b2Body - Создает твердое тело.
DestroyBody(b:b2Body):void - Удаляет твердое тело.
GetBodyCount():int - Возвращает число тел в мире
GetBodyList():b2Body - Возвращает список тел находящихся в мире.
GetGravity():b2Vec2 - Возвращает вектор гравитации действующей в мире.
SetGravity(gravity:b2Vec2):void - Изменить гравитацию, действующую в мире.
SetWarmStarting(flag:Boolean):void - Включает/выключает теплый старт мира.

Это не все методы, которыми обладает мир, но пока что нам хватит и этого smile

Следующий урок:
Part 4




Сообщение отредактировал vovnet - Четверг, 28 Июня 2012, 11:01
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг