Как создавать свои Flash-игры, подобные Angry Birds и World of Goo?
Box2D - это библиотека, которая моделирует физическое поведение твердых тел в двумерном пространстве. Программисты могут использовать ее в своих играх, чтобы сделать...
Ок, давайте рассмотрим что такое box2d вообще и зачем его использовать. Это один из самых продвинутых физических движков. Встречал очень много людей, утверждающих, что такой движок, как Nape намного шустрее. Честно говоря, это так и есть, но только в простейших приложениях (например если создать 3 квадрата 50х50 в Nape и box2d, то первый "съест" меньше памяти(примерно на 1кб). Как правило такие мелочи не сильно влияют на оконечный результат.)
Начнём. Первое что хочу сказать: скачайте
Сейчас создайте новый .as и сделаете его документальным классом проекта. Открываем и первое что нам нужно создать, это переменная для инициализации box2d:
private var _world:b2World;
То есть мы просто создали переменную _world (типа b2World). Дальше, в методе-конструкторе "строим мир":
_world = new b2World(new b2Vec2(0, 10), true);
_world - переменная типа b2World
new - создание нового экземпляра
b2World (prop1:b2Vec2, prop2: Boolean) - метод принимает 2 значения prop1 и prop2.
prop1 - гравитация( b2Vec2 (горизонтальное_смещение,вертикальное_смещение ) )
prop2 - спящие объекты
Довольно часто каждое значение присваиваю переменным, можно встретить:
var gravity:b2Vec2 = new b2Vec2(0,10) var doSleep:Boolean = true; _world = new b2World(gravity, doSleep);
Ок, с миром ясно. Теперь нам предстоит создать землю (пол) чтобы мы могли построить пирамиду из ящиков. Звучит заманчиво? Начнём!
Что нужно знать при создании "тела" в пространстве box2d:
Теория, это хорошо, но без практики никуда.
Первым делом, сразу создавайте все необходимые переменные:
var box : b2Body; var boxDef : b2BodyDef; var boxShapeDef : b2PolygonShape; var boxFixture : b2FixtureDef;
Далее начинаем создавать само тело. Манипуляции из box: b2BodDef;
boxDef = new b2BodyDef(); boxDef.position.Set(250/ METR, 250 / METR); //позиция тела на сцене boxDef.angle = 0; //угол(в радианах, то есть пишем в градусах, умножаем на ПИ, делим на 180) boxDef.type = b2Body.b2_staticBody; //типа тела
Забыл сказать, в box2d пиксели использовать нельзя! Простейшая единица считается метр. То есть чтобы поставить тела в точку 100х100, нужно написать 100/30х100/30. Надеюсь тут всё ясно, ОДИН метр = 30 пикс. У меня в коде METR (public static var METR:int = 30) Манипуляции из box: b2PolygonShape;
boxShapeDef = new b2PolygonShape(); boxShapeDef.SetAsBox((100 / 2) / METR, (100 / 2) / METR); //определяем шейпу как квадрат
Несколько слов о методе SetAsBox (prop1, prop2). В примере выше, я создал квадрат 100х100, но почему записано 100/2? Всё очень просто, точка регистрации в любого тела - по центру. То есть я указал ширину, поделил на 2 и получил середину.
Манипуляции из box: b2FixtureDef;
boxFixture = new b2FixtureDef(); boxFixture.shape = boxShapeDef; //определяем форму boxFixture.density = 0.5; //вес тела boxFixture.friction = 0.5; //сила трения boxFixture.restitution = 0.5; //прыгучесть(отскок)
Тут думаю всё ясно как белый день. Но всё же скажу что: таким свойствам как density, friction, restitution - можно присвоить значение от 0 до 1. Мы всё создали, теперь осталось только добавить тело в "мир".
box = _world.CreateBody(boxDef) box.CreateFixture(boxFixture);
Всё готово! Тело в мире, но не на сцене =\
Первым делом нам нужно создать событие ENTER_FRAME:
_world.Step(1 / METR, 10, 10); //рекомендуемые параметры _world.ClearForces();
И, конечно отрисовываем тела. А что бы это сделать - нужно выполнить метод DrawDebugData()
и наш собственный метод-отрисовщик, который выглядит следующим образом:
var drawThis:b2DebugDraw = new b2DebugDraw(); var spriteToDraw:Sprite = new Sprite(); addChild(spriteToDraw); drawThis.SetSprite(spriteToDraw); drawThis.SetFlags(b2DebugDraw.e_shapeBit); drawThis.SetDrawScale(METR); drawThis.SetAlpha(0.4); drawThis.SetLineThickness(1); _world.SetDebugDraw(drawThis);
У вас, по идеи, должен возникать вопрос: "что это было..". Ответ: "набор методов-отрисовщиков". Теперь каждую строчку по порядку. Сначала, нужно объявить переменную типа b2DebugDraw и создать её экземпляр. Дальше "что-то для прорисовки", точнее Спрайт. Дальше мы обращаемся к drawThis (b2DebugDraw) и её методов.
Вот и всё! Надеюсь, для вас эта информация была полезной :)
Создайте свою первую игру во Flash!
Box2D позволяет людям с небольшим опытом или недостаточными математическими знаниями программирования начать делать вещи, которые раньше они сделать не могли.
C помощью этого курса вы сможете программироавть физические взаимодействия, например столкновения двух объектов, а так же научитесь создавать игровой мир и игровых персонажей.
Уже в ближайшее время, после изучения курса и тренировки вы сможете создать свою первую flash игру-платформер, и чем чёрт не шутит - продать её!
Комментарии
пиши есчо!!!))
круто, давно искал)
"есчо" - "ещё" правильно...
1) Админ всегда прав
2) Если админ не прав, смотри пункт 1
Мы в контакте -
#3 Опубликовано 7 июня, 2011 - 14:10 пользователем lsdhord
#4 Опубликовано 7 июня, 2011 - 15:12 пользователем Notion
#5 Опубликовано 7 июня, 2011 - 15:19 пользователем Прохор
#6 Опубликовано 7 июня, 2011 - 15:35 пользователем Smitg9
#7 Опубликовано 7 июня, 2011 - 17:23 пользователем Fly
Цитата: Smitg9
а для девелопа, Adoba Flash нужен?
lsdhord не обязательно
Smitg9 ок, на неделе с меня еще одна статья о боксах(другие статьи есть на сайте источнике..но ссылку дать немогу - сочтут за рекламу)
Хм... помню недавно поднимал этот вопрос в группе в контакте, вижу, ничего не остается без внимания.
EasyFlash - отличный проект!
Да, я насколько знаю, есть ещё QuickBox2D, с ней пожалуй поудобнее работать.
Fly, не сердитесь, это я специально так написал))
Больше не буду :)
Fly, не сердитесь, это я специально так написал)) Больше не буду :)
Я не сержусь, просто на столько грубые описки/ошибки режут глаз :)
P.S. Я же сам не на 100% знаю русский.
1) Админ всегда прав
2) Если админ не прав, смотри пункт 1
Мы в контакте -
#8 Опубликовано 11 июня, 2011 - 12:25 пользователем nilamop
#9 Опубликовано 12 июня, 2011 - 10:24 пользователем Notion
#10 Опубликовано 13 июня, 2011 - 23:01 пользователем sazonoff
#11 Опубликовано 14 июня, 2011 - 00:25 пользователем Smitg9
Цитата: sazonoff
#12 Опубликовано 18 июня, 2011 - 07:07 пользователем VittyRude
#13 Опубликовано 18 июня, 2011 - 08:13 пользователем Notion
#14 Опубликовано 4 ноября, 2012 - 01:35 пользователем Vetalos
Nation,FlashDevelop рекомендуете, а нельзя ли использовать что-то из продуктов Адобе?
nilamop,
конечно можно, но они платные. Чесно говоря, я еще не встречал редактора лучше FD. Если вам очень хочется продукт Adobe - скачайте Flash Builder
Есля я не ошибаюсь есть ешё Adobe Dreamweaver)
Есля я не ошибаюсь есть ешё Adobe Dreamweaver)
а он то ту при чем?? О_о
Люди! Зачем себя утруждать и писать по 20-30 строчек, чтобы сделать только квадрат и стены?? Есть QuickBox2D ! Там это можно сделать за 3 строчки
Не забывайте, что QuickBox2D это всего лишь набор команд библиотеки Box2D и возможности ваши ограничены(я имею ввиду чистое использование).
подскажите кто знает
вообщем у меня такая проблема, использую Box2d Flash Alchemy Port + World Construction Kit и возникла такая проблема,есть 2 тела, одно статично второе динамично, и вот при перемещении (динамического тела) куба, о статическое(например пол), он или скользит как по льду или вообще не двигается, а мне нужно сделать так чтобы у него было минимальная сила трения, то есть чтобы куб перемещался вообще без трения, может кто сталкивался с WCK прошу помощи, буду очень признателен.