Romixal
GM Pro user
Репутация: 146
Offline
Пол:  Награды:  ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif) 
API: GameMaker Studio Pro
Деятельность: developer
Сообщений: 627
|
 |
« : Август 15, 2011, 02:19:06 » |
|
Я очень люблю это расширение и применял его во множестве своих проектов. Год назад у меня полетел жесткий диск, потерял большинство своих проектов :( . Постараюсь объяснить все максимально просто без всяких наворотов. Я не думаю, что вы захотите сделать свой ephoria physix.Я использую dll, но если вы используете gex, то вам это тоже необходимо к прочтению, что бы иметь хоть какие-то базовые понятия о работе данного расширения. В данной статье я буду использовать стандартный набор скриптов и констант. (см. прикрипление) В начале все просто. Достаточно выполнить скрипт приведенный ниже, для подключения длл к проекту. init_physics(); Выбирите место куда вставить данный скрипт, рекомендую в  Game Start. Если будут возникать ошибки, то создайте отдельную комнату. В этой комнате разместите объект, который выполнит данный скрипт и перейдет в комнату с игровым уровнем или же меню. Теперь создадим объект, который будет контролировать физику игры. В шаге укажите функцию. update_bodies(1); Эта функция указывает длл, когда нужно сделать расчет физики. Аргумент этой функции определяет на какой шаг расчитать физику. Чем больше значение - тем физические объекты будут двигатся быстрей (как при перемотке), а чем меньше - тем медленнее(знаменитое "слоу мо"). При нуле - пауза. Аргумент нужно подбирать в ручную, выбирите свою константу удовлетворяющую поставленной задаче. Желательно не устанавливать отрицательные значения. При переходе между комнатами необходимо добавить следующие 2 функции. clear_bodies(); clear_joints(); Это нужно для того, чтобы в последующих комнатах не оставалось "физических тел" с предидущих комнат. Теперь приступим к созданию объектов. Для этого есть функция, у которой количество даваемых ей аргументов зависит от требуемого физического объекта. Она возвращает id данного физического тела, который пригодится для работы с ним. create_body(...) Первые 2 аргумента являются координатами. 3 аргумент устанавливает плотность объекта, или 0 если статичный (пол или стена). 4 аргумент определяет форму объекта, на каждую форму имеются свои константы: SHAPE_BOX имеет форму прямоугольника. 5 аргумент определяет его ширину, а 6 высоту. SHAPE_SPHERE имеет форму шара. 5 аргумент определяет его радиус. SHAPE_NGON: arg4 - x radius; arg5 - y radius; arg6 - numPoints SHAPE_TRIANGLE: arg5 - width; arg6 - height (pointy end on top); arg7 - x pos of top point SHAPE_CAPSULE: arg5 - width; arg6 - height without caps (rounded ends on top/bottom) SHAPE_POLYGON: arg5 - polygon handle; arg6 - polygon line width (not needed; default = 2) В шаге динамического(!) объекта установите следующую функцию: object_update(ID); Где ID это значение, которое вернула функция create_body. Функция object_update выполняет следующий код self.x = get_body_x(argument0); self.y = get_body_y(argument0); self.image_angle = get_body_rotation(argument0); Смотри 3-й пункт В событии уничтожения объекта, установить эту функцию: destroy_body(ID); Аргумент ID вам уже известен. Усложним задачу. К примеру нам нужно установить кординаты и угол наклона данного физического объекта. Для этого мы используем следующие функции: set_body_position(ID,x,y); set_body_rotation(ID,angle); Так же мы можем изменить скорость движения и вращения: set_body_hspeed(ID,hspeed); set_body_vspeed(ID,vspeed); set_body_rotspeed(ID,rotation_speed); Аналогично мы можем получить эти значения: x=get_body_x(ID); y=get_body_y(ID); rotation=get_body_rotation(ID); hspeed=get_body_hspeed(ID); vspeed=get_body_vspeed(ID); rotation_speed=get_body_rotspeed(ID); Пока все, комментируйте и корректируйте 
|
|
|
|
Записан
|
|
|
|
|
Server313
Гость
|
 |
« Ответ #1 : Август 15, 2011, 07:32:31 » |
|
А это для какой версии? На 4 initiate_physics(); не идёт(
|
|
|
|
|
Записан
|
|
|
|
Romixal
GM Pro user
Репутация: 146
Offline
Пол:  Награды:  ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif) 
API: GameMaker Studio Pro
Деятельность: developer
Сообщений: 627
|
 |
« Ответ #2 : Август 15, 2011, 08:47:46 » |
|
Ошибся, на самом деле init_physics . Исправил.
|
|
|
|
|
Записан
|
|
|
|
|
Server313
Гость
|
 |
« Ответ #3 : Август 15, 2011, 10:29:49 » |
|
И почемуто создаю всё как тут. Но пишет ошибку. Может ещё раз всё проверишь? И пример выложи ПО ЭТОЙ статье. Плиз.
|
|
|
|
|
Записан
|
|
|
|
|
|
SilentPhil
Norland
GM Pro user
Репутация: 479
Offline
Пол:  Награды: ![Первое место на HellRoom Jam #7 [Hell in Your Fridge] Первое место на HellRoom Jam #7 [Hell in Your Fridge]](http://forum.hellroom.ru/awards/9f62be4ccdd73fb5efadd1f34c96ed53_hj7_gold_original.gif)  ![За постоянность! [50 дней на форуме] За постоянность! [50 дней на форуме]](http://forum.hellroom.ru/awards/d09ba76b977b84fd4f5dcfae1f2918ff_hellroomforum_time_copper.gif) ![За лояльность! [+150 репутации] За лояльность! [+150 репутации]](http://forum.hellroom.ru/awards/d3334d4fd3e3124bd7ba2ce29fab5c8a_hellroomforum_good_tin.gif)  ...
API: GameMaker Studio 2
Деятельность: GML, Pixel Art
Сообщений: 1363
|
 |
« Ответ #5 : Август 15, 2011, 11:02:24 » |
|
Romixal, неплохо :) Давно хотел изучить какой-нибудь физ. движок, а руки все не доходили. Теперь, думаю, дойдут.
|
|
|
|
|
Записан
|
|
|
|
dasmax
Участник
  
Репутация: 22
Offline
Пол: 
API: Game Maker 8.0 Pro
Деятельность: Gamedev
Сообщений: 107
|
 |
« Ответ #6 : Август 15, 2011, 12:27:14 » |
|
хорошо написано, примерчиг бы
|
|
|
|
|
Записан
|
|
|
|
Romixal
GM Pro user
Репутация: 146
Offline
Пол:  Награды:  ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif) 
API: GameMaker Studio Pro
Деятельность: developer
Сообщений: 627
|
 |
« Ответ #7 : Август 15, 2011, 14:03:26 » |
|
Прикреплен архив с примерами, вы не заметили?
|
|
|
|
|
Записан
|
|
|
|
|
Server313
Гость
|
 |
« Ответ #8 : Август 15, 2011, 15:47:10 » |
|
Romixal, ж это SDK... А я всё пишу как тут, добавил dll, добавил скрипты и сё равно ошибки, в box вроде! Проверь всё, а.
|
|
|
|
|
Записан
|
|
|
|
Romixal
GM Pro user
Репутация: 146
Offline
Пол:  Награды:  ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif) 
API: GameMaker Studio Pro
Деятельность: developer
Сообщений: 627
|
 |
« Ответ #9 : Август 15, 2011, 17:15:17 » |
|
А константы? Я не Павел Глоба, сложно скопипатстить код ошибки?
|
|
|
|
|
Записан
|
|
|
|
|
Server313
Гость
|
 |
« Ответ #10 : Август 15, 2011, 19:51:08 » |
|
И кстати надо писать: init_physics("GMPhysics.dll") - а то без указания файла не рабает! Добавлено: Август 15, 2011, 19:57:27 Плиз Переделайте Чтоб работало...  Дам плюс 
|
|
|
|
Записан
|
|
|
|
SilentPhil
Norland
GM Pro user
Репутация: 479
Offline
Пол:  Награды: ![Первое место на HellRoom Jam #7 [Hell in Your Fridge] Первое место на HellRoom Jam #7 [Hell in Your Fridge]](http://forum.hellroom.ru/awards/9f62be4ccdd73fb5efadd1f34c96ed53_hj7_gold_original.gif)  ![За постоянность! [50 дней на форуме] За постоянность! [50 дней на форуме]](http://forum.hellroom.ru/awards/d09ba76b977b84fd4f5dcfae1f2918ff_hellroomforum_time_copper.gif) ![За лояльность! [+150 репутации] За лояльность! [+150 репутации]](http://forum.hellroom.ru/awards/d3334d4fd3e3124bd7ba2ce29fab5c8a_hellroomforum_good_tin.gif)  ...
API: GameMaker Studio 2
Деятельность: GML, Pixel Art
Сообщений: 1363
|
 |
« Ответ #11 : Август 15, 2011, 20:08:31 » |
|
Первый пост нужно внимательней читать. В данной статье я буду использовать стандартный набор скриптов и констант
|
|
|
|
|
Записан
|
|
|
|
Romixal
GM Pro user
Репутация: 146
Offline
Пол:  Награды:  ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif) 
API: GameMaker Studio Pro
Деятельность: developer
Сообщений: 627
|
 |
« Ответ #12 : Август 15, 2011, 20:35:22 » |
|
Плиз Переделайте Чтоб работало...  Дам плюс  Во первых ты забыл константы, а во вторых не указал ширину и высоту блока.
|
|
|
|
Записан
|
|
|
|
|
Server313
Гость
|
 |
« Ответ #13 : Август 15, 2011, 20:44:18 » |
|
Romixal, +1. Ток завтра, а то лимит... Просто немножко не понятно написано. Вот про тела бы подробней! Во всех остальных телах только SHAPE_BOX заменить на чёнить другое?
|
|
|
|
|
Записан
|
|
|
|
Romixal
GM Pro user
Репутация: 146
Offline
Пол:  Награды:  ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif) 
API: GameMaker Studio Pro
Деятельность: developer
Сообщений: 627
|
 |
« Ответ #14 : Август 15, 2011, 20:46:45 » |
|
Прочитай внимательно второй пункт -> создание объекта. Там написано какие аргументы за что отвечают SHAPE_BOX имеет форму прямоугольника. 5 аргумент определяет его ширину, а 6 высоту.
|
|
|
|
|
Записан
|
|
|
|
|