Пятница, 26 Апреля 2024, 11:37

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [355]
Статьи об общих понятиях связанных с созданием игр.
Программирование [82]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [145]
Статьи о программах для создания игр, уроки и описания.
Софт [43]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [161]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [129]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Типа какой из этих игр вы предпочитаете делать игры?
Всего ответов: 16792
Главная » Статьи » Программирование

Как добавить в игру физику на game maker?
Как добавить физику на game maker'e
Здравствуйте! Меня уже больше года не было на GCUP и, зайдя на сайт, я увидел, что начался конкурс по разработки физических игр. Так как, наверное, у многих возникла потребность написать физическую игру, я решил написать статью по теме разработки физических игр на 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 в первую очередь, поставить статические объекты(пол) и самый простой физический эксперимент готов!
Категория: Программирование | Добавил: WhoAmI (24 Февраля 2014)
Просмотров: 5987 | Комментарии: 7 | Рейтинг: 3.5/13 |
Теги: физика, Physics, Extrime Physics, кодинг, Урок, Добавить физику, Гравитация, GML, GM, Game Maker
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Как добавить в игру физику на game maker?», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 7
+0-
7 First   (05 Апреля 2014 02:59) [Материал]
Firstвсё, гоу на ГМ делать игры на фалко

+0-
5 WhoAmI   (26 Марта 2014 22:33) [Материал]
WhoAmIСпасибо.

+0-
3 Unter_Ukroppen   (17 Марта 2014 19:46) [Материал]
Unter_UkroppenОтличная статья! up

+0-
4 WhoAmI   (26 Марта 2014 22:31) [Материал]
WhoAmIСпасибо буду стараться)

+0-
2 StarBerry   (17 Марта 2014 08:22) [Материал]
StarBerryВсё это можно в два раза проще выполнить.

+0-
6 WhoAmI   (29 Марта 2014 11:27) [Материал]
WhoAmIДа согласен, можно не то что в два раза можно во много раз это решить, но данная статья является обзором базовых функций и возможностей библиотеки Extrime Physics.

+0-
1 Gargolev43   (06 Марта 2014 13:46) [Материал]
1)исходники примера?
2)вы или библиотека решаете проблему того, что при столкновении объекты останавливаются не вплотную, а на расстоянии друг от друга?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • GameLooper
  • Amp II Game Engine
  • Lavgine
  • IrrRPG Builder
  • Silent Walk: RENAISSANCE
  • NES Maker
  • Demoniak3D
  • Easy Game Creator
  • Diligent
  • ORTS
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг