Game Maker - создание игр | HellRoom Games
Май 16, 2025, 01:11:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Идеальная физика бильярда!  (Прочитано 11643 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Iskander016
Пользователь
***

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

Пол: Мужской
API: GameMaker Studio Standard
Сообщений: 88

UA


WWW
« : Ноябрь 01, 2010, 16:12:15 »

Я создавал свой 3Д Бильярд, но никак не мог сделать нормальную физику шаров...так то все сделал что задумал, а физику не очень=( В етом вопросе мне помог один человек Deluksic...он живет в Хорватии, и мне  ним пришлось говорить через инет, он дал мне свои скрипты, которые я почти без изминений использовал для своей физики...создаю данную тему, для тех, кто возможно когда-то будет создавать подобный проект - бильярд!
скрипт Bounce:
Код:
B1 = argument0
B2 = argument1
if point_distance(B1.x,B1.y,B2.x,B2.y) dd= sprite_height {

move(B1,B2)

dx = B1.x-B2.x;
dy = B1.y-B2.y;
coll_ang = arctan2(dy, dx);
sp1 = sqrt(B1.hspeed*B1.hspeed+B1.vspeed*B1.vspeed);
sp2 = sqrt(B2.hspeed*B2.hspeed+B2.vspeed*B2.vspeed);
dir1 = arctan2(B1.vspeed, B1.hspeed);
dir2 = arctan2(B2.vspeed, B2.hspeed);
xspeed_1 = sp1*cos(dir1-coll_ang);
yspeed_1 = sp1*sin(dir1-coll_ang);
xspeed_2 = sp2*cos(dir2-coll_ang);
yspeed_2 = sp2*sin(dir2-coll_ang);
fxspeed_1 = ((B1.m-B2.m)*xspeed_1+(B2.m+B2.m)*xspeed_2)/(B1.m+B2.m);
fxspeed_2 = ((B1.m+B1.m)*xspeed_1+(B2.m-B1.m)*xspeed_2)/(B1.m+B2.m);
fyspeed_1 = yspeed_1;
fyspeed_2 = yspeed_2;
B1.hspeed = cos(coll_ang)*fxspeed_1+cos(coll_ang+pi/2)*fyspeed_1;
B1.vspeed = sin(coll_ang)*fxspeed_1+sin(coll_ang+pi/2)*fyspeed_1;
B2.hspeed = cos(coll_ang)*fxspeed_2+cos(coll_ang+pi/2)*fyspeed_2;
B2.vspeed = sin(coll_ang)*fxspeed_2+sin(coll_ang+pi/2)*fyspeed_2;
}
Скрипт Move:
Код:
B1 = argument0;
B2 = argument1;
{
B1.x += lengthdir_x((point_distance(B1.x,B1.y,B2.x,B2.y)-sprite_height+1),point_direction(B1.x,B1.y,B2.x,B2.y))
B1.y += lengthdir_y((point_distance(B1.x,B1.y,B2.x,B2.y)-sprite_height+1),point_direction(B1.x,B1.y,B2.x,B2.y))
B2.x += lengthdir_x((point_distance(B1.x,B1.y,B2.x,B2.y)-sprite_height+1),point_direction(B1.x,B1.y,B2.x,B2.y))
B2.y += lengthdir_y((point_distance(B1.x,B1.y,B2.x,B2.y)-sprite_height+1),point_direction(B2.x,B2.y,B1.x,B1.y))
}
я, честно говоря, не полностью разобрался в данных кодах, но все же смог кое что понять и исходник который я из етих скриптов сделал я выложу ниже...он адаптирован под меня, и мою игру - мною!
исходник поможет разобраться в скриптах и как их использовать!
если тема, по мнению админов, создана криво или сайт не нуждается в данной теме, прошу сделать как считаете нужным!

* Great Real Phisics Billiards 2.gmk (11.42 Кб - загружено 1231 раз.)
Записан

oGiRocK
UncleDec
Совсем не
«Старожил форума»
******

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+150 репутации]
API: Love
Сообщений: 3154


WWW
« Ответ #1 : Ноябрь 01, 2010, 18:13:18 »

мог бы код хоть обвести функцией "Код" ))  :-\

P.S. Решётка, если что...  :)
Записан
Iskander016
Пользователь
***

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

Пол: Мужской
API: GameMaker Studio Standard
Сообщений: 88

UA


WWW
« Ответ #2 : Ноябрь 01, 2010, 23:06:08 »

 ;) ок, приму ко вниманию!
Записан

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

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