Данила
Участник
  
Репутация: 26
Offline
Пол:  Награды: ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif)
API: Game Maker 8.0 Pro
Деятельность: Скриптописатель-любитель
Сообщений: 117
|
 |
« : Декабрь 18, 2010, 18:22:24 » |
|
Вот здесь http://forum.hellroom.ru/index.php/topic,1552.0.html FanTom давал совет одному новичку, как сделать, чтобы пушка всегда была сзади танка, не зависимо от направления движения танка FanTom посоветовал код: xn = x + sin((direction-90)*pi/180)*10; yn = y + cos((direction-90)*pi/180)*10; но потом тот, кто задавал вопрос, уточнил, что нужно сделать так, чтобы пушка была не сзади танка, а левее и FanTom изменил код на такой x = Tank.x + sin((Tank.direction+180)*pi/180)*12; y = Tank.y + cos((Tank.direction+180)*pi/180)*12; Посмотрев эти 2 кода я пришёл к выводу, что разница в них лишь в некоторых цифрах. Визуально же (в игре) разница большая. Также я понял что в этих кодах присутствуют такие понятия как синус и косинус. Математик из меня плохой, чтобы самому высчитать нужные числа, что натолкнуло меня на мысль-не сделать ли специальный калькулятор на движке Game Marker. Пользовательский интерфейс сделать примерно такой:  Программа для прикрепления одного объекта к другому по Lengthdir Я сам сделал бы такую программу, но по правде я не знаю, как вычисляются некоторые числа: x = Tank.x + sin((Tank.direction+вот это не могу понять)*pi/180)*ну это понятно-расстояние, на которое надо отдалить объект; y = Tank.y + cos((Tank.direction+не могу понять)*pi/180)*расстояние, на которое надо отдалить объект; Так что, FanTom, на Вас вся надежда. Если найдётся время, буду признателен + эта программа пригодится, я думаю, очень многим.
|
|
« Последнее редактирование: Сентябрь 07, 2014, 23:04:21 от FanTom »
|
Записан
|
|
|
|
Fantom
I am... All of me
Гл. Администратор
Репутация: 1325
Offline
Пол:  Награды:  ![За постоянность! [500 дней на форуме] За постоянность! [500 дней на форуме]](http://forum.hellroom.ru/awards/e0371460a203dd46d2dc161571bf6144_hellroomforum_time_gold.gif) ![За лояльность! [+1000 репутации] За лояльность! [+1000 репутации]](http://forum.hellroom.ru/awards/49d1e615667c15086498002286ccd3e9_hellroomforum_good_gold.gif)   ...
API: GameMaker Studio Master
Сообщений: 5026
|
 |
« Ответ #1 : Декабрь 18, 2010, 18:35:59 » |
|
Так что, FanTom, на Вас вся надежда. Если найдётся время, буду признателен + эта программа пригодится, я думаю, очень многим.
Да без проблем ;) Только действительно время нужно, а как делать - я уже знаю Краткое описание.Программа предназначена для автоматической генерации кода для дочернего объекта. Выполняя этот код, дочерний объект окажется именно в том положении относительно родительского, в котором он был помещен в программе. Ситуации для применения (или вопросы, решаемые программой): 1. Как прикрепить один объект к другому (башню к танку, руку к персонажу). Код при этом выполнять в событиях шага или рисования. 2. Как сделать так, чтобы пуля вылетала из дула. Код выполнять в создании пули, или создавать в уже вычисленных координатах. В некоторых случаях целесообразнее использовать image_angle родительского объекта, вместо direction. Выбор между этими переменными делайте исходя из своих потребностей и особенностей этих переменных, для чего каждая используется (поворот спрайта, либо направление движения). Скачать последнюю версию программы можно отсюда:
|
|
« Последнее редактирование: Февраль 12, 2022, 11:23:05 от Fantom »
|
Записан
|
|
|
|
Данила
Участник
  
Репутация: 26
Offline
Пол:  Награды: ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif)
API: Game Maker 8.0 Pro
Деятельность: Скриптописатель-любитель
Сообщений: 117
|
 |
« Ответ #2 : Декабрь 18, 2010, 18:40:15 » |
|
Супер, ну спасибо Вам!
|
|
|
Записан
|
|
|
|
Dva_Kota
|
 |
« Ответ #3 : Декабрь 18, 2010, 19:01:42 » |
|
Только лучше делать не через sin и cos, а через lengthdir_x и lengthdir_y. Идея действительно очень хорошая. И поможет это не только новичкам. Если у меня будет время, тоже подумаю над этим. А то, действительно, немного напрягает вручную подбирать координаты, особенно когда нужно точно сделать.
|
|
|
Записан
|
|
|
|
Fantom
I am... All of me
Гл. Администратор
Репутация: 1325
Offline
Пол:  Награды:  ![За постоянность! [500 дней на форуме] За постоянность! [500 дней на форуме]](http://forum.hellroom.ru/awards/e0371460a203dd46d2dc161571bf6144_hellroomforum_time_gold.gif) ![За лояльность! [+1000 репутации] За лояльность! [+1000 репутации]](http://forum.hellroom.ru/awards/49d1e615667c15086498002286ccd3e9_hellroomforum_good_gold.gif)   ...
API: GameMaker Studio Master
Сообщений: 5026
|
 |
« Ответ #4 : Декабрь 18, 2010, 19:07:54 » |
|
Ну в общем пока так. Работает правильно, но немного не так в правой верхней четверти (+200 с лишним градусов - не очень удобно, но приемлемо). Только лучше делать не через sin и cos, а через lengthdir_x и lengthdir_y.
А вот с этими функциями наверно совсем другая формула будет... upd (19:33):обновил пример. можно копировать код в буфер обмена, нажав Enter. ...а над новой формулой еще подумать надо. [прикрепленный документ удален администратором]
|
|
« Последнее редактирование: Июнь 04, 2012, 17:48:04 от FanTom »
|
Записан
|
|
|
|
Dva_Kota
|
 |
« Ответ #5 : Декабрь 18, 2010, 19:17:09 » |
|
Да, другая. Покороче и работает быстрее (про это и в справке написано). Примерно так выглядит (это не для данного случая, тут числа другие): x=x+lengthdir_x(15,direction-18); y=y+lengthdir_y(15,direction-18);
|
|
|
Записан
|
|
|
|
Данила
Участник
  
Репутация: 26
Offline
Пол:  Награды: ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif)
API: Game Maker 8.0 Pro
Деятельность: Скриптописатель-любитель
Сообщений: 117
|
 |
« Ответ #6 : Декабрь 18, 2010, 19:34:33 » |
|
Ну если эта функция действительно быстрее работает, то я думаю что программу лучше всего подстраивать именно под неё.
|
|
|
Записан
|
|
|
|
Fantom
I am... All of me
Гл. Администратор
Репутация: 1325
Offline
Пол:  Награды:  ![За постоянность! [500 дней на форуме] За постоянность! [500 дней на форуме]](http://forum.hellroom.ru/awards/e0371460a203dd46d2dc161571bf6144_hellroomforum_time_gold.gif) ![За лояльность! [+1000 репутации] За лояльность! [+1000 репутации]](http://forum.hellroom.ru/awards/49d1e615667c15086498002286ccd3e9_hellroomforum_good_gold.gif)   ...
API: GameMaker Studio Master
Сообщений: 5026
|
 |
« Ответ #7 : Декабрь 18, 2010, 19:51:11 » |
|
Ну вот в принципе всё. Под новую формулу пример подстроен ;) Всё работает. В начале спрашивается название Корпуса, относительно которого рассчитывается положение. И так же на Enter копируется код в буфер обмена.
[прикрепленный документ удален администратором]
|
|
« Последнее редактирование: Июнь 04, 2012, 17:47:36 от FanTom »
|
Записан
|
|
|
|
S_Kleer
|
 |
« Ответ #8 : Декабрь 18, 2010, 19:54:14 » |
|
Ооо! Вау! Может ещё добавить такую табличку?
"Координаты сохранены в буфер обмена."
|
|
|
Записан
|
Коты - Мирители
|
|
|
Hummer
scio me nihil scire
GM Pro user
Репутация: 335
Offline
Пол:  Награды:  ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif) ![За лояльность! [+300 репутации] За лояльность! [+300 репутации]](http://forum.hellroom.ru/awards/8ff7443ce508760cfbf715910b3eb0b3_hellroomforum_good_copper.gif)  
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573
|
 |
« Ответ #9 : Декабрь 18, 2010, 19:57:52 » |
|
Прикольно, у меня вот что получилось x=Corpus.x+lengthdir_x(0,Corpus.direction); y=Corpus.y+lengthdir_y(0,Corpus.direction);
|
|
|
Записан
|
Есть вещи, которые нельзя объяснить. Для всего остального есть Справка Рандом-рандом-рандомище (с)  C++ & OpenGL
|
|
|
Fantom
I am... All of me
Гл. Администратор
Репутация: 1325
Offline
Пол:  Награды:  ![За постоянность! [500 дней на форуме] За постоянность! [500 дней на форуме]](http://forum.hellroom.ru/awards/e0371460a203dd46d2dc161571bf6144_hellroomforum_time_gold.gif) ![За лояльность! [+1000 репутации] За лояльность! [+1000 репутации]](http://forum.hellroom.ru/awards/49d1e615667c15086498002286ccd3e9_hellroomforum_good_gold.gif)   ...
API: GameMaker Studio Master
Сообщений: 5026
|
 |
« Ответ #10 : Декабрь 18, 2010, 20:03:11 » |
|
Может ещё добавить такую табличку?
"Координаты сохранены в буфер обмена."
Можно. Прикреплено. ;) И еще можно: 1. Переключение режимов: установка расположения и тестирование - перемещение вокруг. 2. Выбор спрайтов самим пользователем. Но это немного труднее  [прикрепленный документ удален администратором]
|
|
« Последнее редактирование: Июнь 04, 2012, 17:48:30 от FanTom »
|
Записан
|
|
|
|
S_Kleer
|
 |
« Ответ #11 : Декабрь 18, 2010, 20:05:27 » |
|
2. Выбор спрайтов самим пользователем.
Об этом я тоже думал.  Добавлено: Декабрь 18, 2010, 20:06:42 Ставлю плюсик. ;)
|
|
« Последнее редактирование: Июнь 04, 2012, 17:52:43 от FanTom »
|
Записан
|
Коты - Мирители
|
|
|
Dva_Kota
|
 |
« Ответ #12 : Декабрь 18, 2010, 20:16:39 » |
|
Я думаю можно сделать более универсально: Объекты сделать в виде точек или маленьких кружков. чтобы было видно, где именно находятся их центры. Эту прогу ведь можно использовать не только для прикрепления башни к танку, но и, например, для прикрепления оружия к игроку, и вообще много где.
|
|
|
Записан
|
|
|
|
Fantom
I am... All of me
Гл. Администратор
Репутация: 1325
Offline
Пол:  Награды:  ![За постоянность! [500 дней на форуме] За постоянность! [500 дней на форуме]](http://forum.hellroom.ru/awards/e0371460a203dd46d2dc161571bf6144_hellroomforum_time_gold.gif) ![За лояльность! [+1000 репутации] За лояльность! [+1000 репутации]](http://forum.hellroom.ru/awards/49d1e615667c15086498002286ccd3e9_hellroomforum_good_gold.gif)   ...
API: GameMaker Studio Master
Сообщений: 5026
|
 |
« Ответ #13 : Декабрь 18, 2010, 20:22:25 » |
|
Объекты сделать в виде точек или маленьких кружков. чтобы было видно, где именно находятся их центры.
Так-то оно так, но размеры разных объектов тоже в большинстве случаев играют важную роль в расположении... Пример с выбором собственных спрайтов прикреплен ;) [прикрепленный документ удален администратором]
|
|
« Последнее редактирование: Июнь 04, 2012, 17:48:48 от FanTom »
|
Записан
|
|
|
|
Dva_Kota
|
 |
« Ответ #14 : Декабрь 18, 2010, 20:48:11 » |
|
Почему-то не выбираются у меня спрайты ??? Выбрал, спрайты, а в проге все равно остались стандартные... И еще: При выборе спрайтов у них центр устанавливается по умолчанию в верхний левый угол. Как правило, в игре ценр спрайта устанавливают в другое место. И не всегда в центр... Значит нужно еще добавить выбор центра спрайта+ добавить два объекта, которые будут находиться поверх остальных и будут показывать где находятся центры спрайтов. И желательно сделать выбор цвета для этих объектов-точек (Не известно ведь какого цвета спрайты пользователь будет использовать). Хотя можно сделать, например, белую точку с черной обводкой 
|
|
|
Записан
|
|
|
|
|