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 - Включает/выключает теплый старт мира.
Это не все методы, которыми обладает мир, но пока что нам хватит и этого
Следующий урок: Part 4
Сообщение отредактировал vovnet - Четверг, 28 Июня 2012, 11:01 |
|
| |