Game Maker - создание игр | HellRoom Games
Январь 14, 2025, 09:31:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Обучение Extreme Physics. Первый урок  (Прочитано 20694 раз)
0 Пользователей и 8 Гостей смотрят эту тему.
lucheus
Free Bird
«Старожил форума»
******

Репутация: 81
Offline Offline

Пол: Мужской
Награды:
500 сообщений!За постоянность! [50 дней на форуме]
API: GameMaker Studio 2
Деятельность: Игростроение, дизайн, музыка, ролики и т.п
Сообщений: 769


« : Январь 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


* firstEP.gmk (14.44 Кб - загружено 1230 раз.)
« Последнее редактирование: Май 24, 2012, 14:56:25 от lucheus » Записан

"Глина, из которой ты слеплен, высохла и затвердела, и уже ничто и никто на свете не сумеет пробудить в тебе уснувшего музыканта или поэта, или астронома, который, быть может, жил в тебе когда-то" (с) Антуан де-Сент Экзюпери

Tulpan
Участник
****

Репутация: 43
Offline Offline

Пол: Мужской
Награды:
За постоянность! [10 дней на форуме]
API: Game Maker 8.0 Pro
Деятельность: Лентяй
Сообщений: 238


Glazzz


« Ответ #1 : Январь 28, 2012, 13:19:36 »

Отличная статья!  Надо будет попробовать сделать игру с физикой! 
Записан
Alcatraz
Flight Dream Studio
«Старожил форума»
******

Репутация: 392
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Unity 3D3 место в конкурсе: Адекватные игры #2 [Стимпанк]2 место за игру: Dead Night (Конкурс Золотые Руки)...
API: Unity 3D
Деятельность: C#, C++, UNITY3D
Сообщений: 3392


http://vk.com/alcatraz_rus


WWW
« Ответ #2 : Январь 28, 2012, 13:26:58 »

молодец!    Уважуха
Записан

fair_fire
Новичок
*

Репутация: 0
Offline Offline

API: Game Maker 8.0 Pro
Сообщений: 3


WWW
« Ответ #3 : Январь 28, 2012, 19:02:11 »

вообще - то не очень я про урок Буржуйский титориал мне показался понятнее
А вот если бы кто ни будь, сделал справку с переводом по функциям http://www.maartenbaert.be/extremephysics/reference/ цены бы такой справке не было бы
Записан

lucheus
Free Bird
«Старожил форума»
******

Репутация: 81
Offline Offline

Пол: Мужской
Награды:
500 сообщений!За постоянность! [50 дней на форуме]
API: GameMaker Studio 2
Деятельность: Игростроение, дизайн, музыка, ролики и т.п
Сообщений: 769


« Ответ #4 : Январь 29, 2012, 03:52:59 »

вообще - то не очень я про урок Буржуйский титориал мне показался понятнее
А вот если бы кто ни будь, сделал справку с переводом по функциям http://www.maartenbaert.be/extremephysics/reference/ цены бы такой справке не было бы

чего тебе непонятно?
Записан

"Глина, из которой ты слеплен, высохла и затвердела, и уже ничто и никто на свете не сумеет пробудить в тебе уснувшего музыканта или поэта, или астронома, который, быть может, жил в тебе когда-то" (с) Антуан де-Сент Экзюпери

IGroK_GM
Новичок
*

Репутация: 0
Offline Offline

API: Game Maker 8.0 Pro
Сообщений: 6


« Ответ #5 : Июнь 26, 2013, 00:55:48 »

хм... вроде добавляю константы, а он всё равно на них жалуется 
Записан
DANTES
Участник
****

Репутация: 46
Offline Offline

Пол: Мужской
Награды:
За постоянность!
API: Game Maker 8.0 Pro
Деятельность: Программист
Сообщений: 186


Red-line Community


WWW
« Ответ #6 : Июнь 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
хм... вроде добавляю константы, а он всё равно на них жалуется 
У меня такая же проблема была с константами. Я за место них сделал обычными переменными.
Записан

 
AnderS
Новичок
*

Репутация: 1
Offline Offline

Пол: Мужской
API: GameMaker Studio Master
Деятельность: GML, Java
Сообщений: 4


Today is a good day


« Ответ #7 : Август 10, 2014, 11:08:23 »

Просто автор  в константах сделал ошибку  Мда.... (в константы записал colide1a и colide1b, а в коде написал collide1a и collide1b). А так все работает. Мне только интересно где изменять маску dynamic объекта (изменяя маску у спрайтов ничего не происходит).
Записан

Помог? Плюсани в репу!
VSSgames
Посетитель
**

Репутация: 2
Offline Offline

Пол: Мужской
API: Game Maker 8.0 Pro
Деятельность: Простенькие 2D игры, плтформеры, аркады.
Сообщений: 34


Вам меня не понять, я мыслю иначе.


« Ответ #8 : Март 26, 2016, 21:07:27 »

Киньте ссылку на Extreme Physics.
« Последнее редактирование: Март 26, 2016, 21:38:35 от VSSgames » Записан

__$$$$___$$$$_$$$$__$$$$$$$$____
___$$_____$$___$$___$$______$___
___$$_____$$___$$___$$______$___
___$$_____$$___$$___$$$$$$$$____
___$$_____$$___$$___$$__________
____$$___$$____$$___$$__________
_____$$$$$____$$$$_$$$$_________
Fur
Абы-какой
GM Pro user
*

Репутация: 463
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]Третье место на HellRoom Jam #9 [Flucoldache]За лояльность! [+300 репутации]Настоящий игродел!Боже мой, посмотрите на эту медальку! Первое место на HellRoom Jam #6
API: Game Maker 8.0 Lite
Деятельность: Бурная.
Сообщений: 3673


Лисяток тебе.


« Ответ #9 : Март 26, 2016, 21:19:21 »

Цитировать
Киньте ссылку на Extreme Physics, пожалуйста.
Лови: http://forum.hellroom.ru/index.php?topic=20718.0
Записан

В одной отдельно взятой фразе не должно быть больше миллиона муравьёв, пусть даже она — научного труда о муравьях.

Hyperflex
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.081 секунд. Запросов: 35.