Game Maker - создание игр | HellRoom Games

Game Maker | GameMaker: Studio [Game-Maker.ru] => Статьи / уроки => Тема начата: lucheus от Январь 27, 2012, 08:46:28



Название: Обучение Extreme Physics. Первый урок
Отправлено: lucheus от Январь 27, 2012, 08:46:28
Обучение Extreme Physics. Первый урок
Итак, всем привет. В последнее время все больше и больше накапливается потребность к использованию физики в играх. Спрашивал людей на форуме, но оказалось что всего лишь несколько людей знают физику в Game Maker. Я решил исправить это. Из всех я выбрал Extreme Physic (EP), т.к. она самая емкая для использования.

В этом уроке мы пройдем самую корочку EP, но и это нам даст уже многое...
Я буду использовать 2.2 версию. Не забывайте, когда создадите новый файл игры, выбрать EP в Extension Package.

Приступим. Прежде всего нужно знать что в EP есть два типа объектов: статический (static) и динамический (dynamic). Статический объект неподвижен, то есть составляет твердую основу, а динамический тот который воздействован разным силам и производит движение на экране. Например, пол в вашем доме можно приставить статическим обьектом, а кружку падающую на пол (необязательно падающию), это динамический объект.

Для удобства мы инициируем свои дополнительные константы
Добавить ресурс => Определить константы
Там пишем:

Имя: colide1a Переменная: 1;
Имя: colide1b Переменная: 1;
Имя: grav Переменная: 0.4

И вот мы загружаем два спрайта: статического и динамического объектов и соответствующе называем их: static и dynamic. Центрируем спрайты. Пусть спрайт стат. обьекта будет квадрат, а дин. кружок.
Создаем обьект и называем его system
Код: (create)
global.world=ep_world_create() // Инициируем физический мир, нужно писать это всегда // global.world - пременная нашего мира
ep_world_set_settings(global.world,1,20,10,0.1,0.5,0,0.5,1); // Устанавливаем глобальные настройки для мира
Код: (end step)

ep_world_update_contacts(global.world); // Для столкновений в физическом мире
ep_world_simulate_step(global.world); // Что бы "Время не остановилось"
Создаем два скрипта. Один называем physics_object_set, а второй physics_object_update
Код: (В physics_object_set пишем:)
ep_body_set_position(global.world,argument0,x,y,degtorad(image_angle));

Код: (physics_object_update пишем:)
if !ep_body_is_sleeping(global.world,argument0) {
x = ep_body_get_x(global.world,argument0);
y = ep_body_get_y(global.world,argument0);
image_angle = radtodeg(ep_body_get_rot(global.world,argument0));
}

Создаем два объекта: static и dynamic и присваиваем им свои спрайты.

Выбираем обьектstatic
Код: (create)
body = ep_body_create_static(global.world); // Открыто заявляем что это статический объект в нашем мире
shape1 = ep_shape_create_box(global.world,body,sprite_width,sprite_height,0,0,0,1); // Делаем ему квадратную маску размерами своего спрайта
ep_shape_set_collision(global.world,body,shape1,collide1a,collide1b,0); // Пишем о столкновениях с другими объектами
ep_shape_set_material(global.world,body,shape1,0.4,0.4,0,0); // Устанавливаем его характеристики
physics_object_set(body); // Наш скрипт
Код: (destroy)

ep_body_destroy(global.world,body);// Стандартная функция удаления из "мира физического"
В обьекте dynamic
Код: (create)
body = ep_body_create_dynamic(global.world,false); // Динаический объект
shape1 = ep_shape_create_circle(global.world,body,sprite_height/2,0,0,0,1); // Но только теперь это круглая маска размера спрайта
ep_shape_set_collision(global.world,body,shape1,collide1a,collide1b,0); // Столкновения
ep_shape_set_material(global.world,body,shape1,0.4,0.4,0,0); // Характеристики
ep_body_calculate_mass(global.world,body); // Автоподсчет массы и определение доп. характеристик
ep_body_set_gravity(global.world,body,0,grav); // Устанавливаем гравитацию для объекта

physics_object_set(body);
Код: (end step)
physics_object_update(body);

Снова открываем объект system
Код: (Glob Left Button)
instance_create(mouse_x,mouse_y,dynamic) // Что бы мы могли проверить

Расставляем объекты в комнате, не забывая что первым ставим в комнату объект system, иначе могут быть проблемы с global.world


Мы получили простую физику шариков и ознакомились с основными функциями Extreme Physic



Название: Re: Обучение Extreme Physic. Первый урок
Отправлено: Tulpan от Январь 28, 2012, 13:19:36
Отличная статья!  sm_good Надо будет попробовать сделать игру с физикой!  sm:)


Название: Re: Обучение Extreme Physic. Первый урок
Отправлено: Alcatraz от Январь 28, 2012, 13:26:58
молодец!  sm_good  sm_respekt


Название: Re: Обучение Extreme Physic. Первый урок
Отправлено: fair_fire от Январь 28, 2012, 19:02:11
вообще - то не очень я про урок Буржуйский титориал мне показался понятнее
А вот если бы кто ни будь, сделал справку с переводом по функциям http://www.maartenbaert.be/extremephysics/reference/ цены бы такой справке не было бы


Название: Re: Обучение Extreme Physic. Первый урок
Отправлено: lucheus от Январь 29, 2012, 03:52:59
вообще - то не очень я про урок Буржуйский титориал мне показался понятнее
А вот если бы кто ни будь, сделал справку с переводом по функциям http://www.maartenbaert.be/extremephysics/reference/ цены бы такой справке не было бы

чего тебе непонятно?


Название: Re: Обучение Extreme Physics. Первый урок
Отправлено: IGroK_GM от Июнь 26, 2013, 00:55:48
хм... вроде добавляю константы, а он всё равно на них жалуется  sm_sad


Название: Re: Обучение Extreme Physic. Первый урок
Отправлено: DANTES от Июнь 26, 2013, 10:36:22
вообще - то не очень я про урок Буржуйский титориал мне показался понятнее
А вот если бы кто ни будь, сделал справку с переводом по функциям http://www.maartenbaert.be/extremephysics/reference/ цены бы такой справке не было бы

Я делал на этот счёт уроки:
1 урок http://forum.hellroom.ru/index.php?topic=15167.msg184690#msg184690
2 урок http://forum.hellroom.ru/index.php?topic=15176.msg184991#msg184991
3 урок http://forum.hellroom.ru/index.php?topic=15181.msg185201#msg185201
Статьи являются переводом справки.

Добавлено: Июнь 26, 2013, 10:37:29
хм... вроде добавляю константы, а он всё равно на них жалуется  sm_sad
У меня такая же проблема была с константами. Я за место них сделал обычными переменными.


Название: Re: Обучение Extreme Physic. Первый урок
Отправлено: AnderS от Август 10, 2014, 11:08:23
Просто автор  в константах сделал ошибку  :facepalm: (в константы записал colide1a и colide1b, а в коде написал collide1a и collide1b). А так все работает. Мне только интересно где изменять маску dynamic объекта (изменяя маску у спрайтов ничего не происходит).


Название: Re: Обучение Extreme Physics. Первый урок
Отправлено: VSSgames от Март 26, 2016, 21:07:27
Киньте ссылку на Extreme Physics.


Название: Re: Обучение Extreme Physics. Первый урок
Отправлено: Fur от Март 26, 2016, 21:19:21
Цитировать
Киньте ссылку на Extreme Physics, пожалуйста.
Лови: http://forum.hellroom.ru/index.php?topic=20718.0 (http://forum.hellroom.ru/index.php?topic=20718.0)