GameCom
Меню сайта
Категории раздела
Разработка игр [3]
Статьи об общих понятиях связанных с созданием игр.
Движки и Гейммейкеры [1]
Статьи о программах для создания игр, уроки и описания.
Программирование [0]
Гайды по программированию на разных ЯП.
Софт [0]
Различные программы, в том числе в помощь игроделам.
Моддинг игр [0]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Разное [0]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Какой из конструкторов лучшее
Всего ответов: 22
Статистика


Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » Разработка игр

Как добавить в игру физику на game maker?

Как добавить физику на game maker'e
Здравствуйте! Я решил написать эту статью по теме разработки физических игр на Game maker. Многие думают, что физика на Game maker, это как Crysis 3 на ЭВМ, на самом деле это далеко не так. Не сочтите за рекламу, я использую библиотеку Extrime Physics. Вот ссылка на библиотеку: http://gm-files.ru/downloads.php?page_id=3309
Это будет небольшой туториал по библиотеке, для тех, кто в ней полнейший чайник (но хотя-бы как то знает GML).
Итак, начнём с самых основ, затем приступим к написанию скриптов. Существует 2 типа объектов - Статический и Динамический. Статический тип объектов - тип, который будет так сказать "курить в сторонке» (пол), а если точнее твёрдая основа. Динамический тип - тип, который будет поддаваться законам физики (мячик). Вначале определим 3 константы (кто не знает - Добавить ресурс ->определить константы). Первая константа colide1a со значением 1, вторая colide1b тоже со значением 1,третья grav со значением 0.4. Итак, в этом туториале мы рассмотрим и статические, и динамические объекты. Загружаем спрайты статического и динамического объекта, называем их spr_static и spr_dinamic. Далее, создаём основной объект(obj_system,obj_controll, называйте, как хотите, в тексте это будет просто system). В событии Create пишем следующий код:

Код

global.world=ep_world_create() // Создание физического мира. Гл. переменная world - наш мир.
ep_world_set_settings(global.world,1,20,10,0.1,0.5,0,0.5,1); // Это функция настройки. Подробно ниже.


Думаю с первой строчой всё слишком понятно.
Со второй посложнее.
Итак, 1 аргумент - переменная нашего мира (та самая первая строчка)
Второй - время шагов, это то же самое что и room_speed, только с физическим миром.
Третий - так называемое время смещения, время небольшого отклонения в физике
Четвёртый - позиция смещения, позиция отклонения
Пятый - позволительная позиция залегания на другой объект
Шестой - отталкивание от других объектов
Седьмой - сила массы объекта
Восьмой - легкость, но в тоже время тяжесть в объекте
Вспоминаем уроки физики, они вам пригодятся.
Ладно. Создаём событие Step в том же объекте и идём дальше, вставляем код:

Код

ep_world_update_contacts(global.world);
ep_world_simulate_step(global.world);


Step, отвечает за обновление параметров физики. 1 Строчка обновление столкновений, в качестве аргумента принимает нашу переменную с миром, вторая строчка за обновление время.
Итак, покидаем наш объект sytem, создаём два скрипта: physics_object_update и physics_object_set.
По названию понятно - physics_object_set(object) - присвоение объекту физики.
physics_object_update(object) - обновление объекта
Итак пишем в 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));
}


Итак, пришёл торжественный момент, создаём наш динамические и статические объекты.
Называем их по любому, присваиваем спрайты (я человек простой, называю их типично: obj_static и obj_dynamic, присваиваем им спрайты).
В create у статического пишем:

Код

body = ep_body_create_static(global.world); // Body - это наш объект, мы указываем, что он статический.
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);// Удаляем объект из мира(принимает в качестве аргумента мир и наш объект)


Итак, со статическим кончено. Теперь динамический.
В 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 при нажатии на левую кнопку пишем:

Код

instance_create(mouse_x,mouse_y,dynamic)


ВСЁ! Не забываем поставить sytem в первую очередь, поставить статические объекты(пол) и самый простой физический эксперимент готов!

Категория: Разработка игр | Добавил: Com-Lan (03.06.2014) | Автор: WhoAmI W
Просмотров: 2683 | Комментарии: 1 | Теги: Как добавить в игру физику на game | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2024Конструктор сайтов - uCoz