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

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: Программа для прикрепления одного объекта к другому по Lengthdir  (Прочитано 96367 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Данила
Участник
****

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

Пол: Мужской
Награды:
За постоянность! [100 дней на форуме]
API: Game Maker 8.0 Pro
Деятельность: Скриптописатель-любитель
Сообщений: 117


WWW
« : Декабрь 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. Пользовательский интерфейс сделать примерно такой:
Я сам сделал бы такую программу, но по правде я не знаю, как вычисляются некоторые числа:
Код:
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 Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
API: GameMaker Studio Master
Сообщений: 5026



« Ответ #1 : Декабрь 18, 2010, 18:35:59 »

Так что, FanTom, на Вас вся надежда. Если найдётся время, буду признателен + эта программа пригодится, я думаю, очень многим.
Да без проблем ;)
Только действительно время нужно, а как делать - я уже знаю

Краткое описание.
Программа предназначена для автоматической генерации кода для дочернего объекта.
Выполняя этот код, дочерний объект окажется именно в том положении относительно родительского, в котором он был помещен в программе.
Ситуации для применения (или вопросы, решаемые программой):
1. Как прикрепить один объект к другому (башню к танку, руку к персонажу). Код при этом выполнять в событиях шага или рисования.
2. Как сделать так, чтобы пуля вылетала из дула. Код выполнять в создании пули, или создавать в уже вычисленных координатах.

В некоторых случаях целесообразнее использовать image_angle родительского объекта, вместо direction.
Выбор между этими переменными делайте исходя из своих потребностей и особенностей этих переменных, для чего каждая используется (поворот спрайта, либо направление движения).



Скачать последнюю версию программы можно отсюда:

* Расчет относительного положения.rar (2259.05 Кб - загружено 267 раз.)
« Последнее редактирование: Февраль 12, 2022, 11:23:05 от Fantom » Записан

Данила
Участник
****

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

Пол: Мужской
Награды:
За постоянность! [100 дней на форуме]
API: Game Maker 8.0 Pro
Деятельность: Скриптописатель-любитель
Сообщений: 117


WWW
« Ответ #2 : Декабрь 18, 2010, 18:40:15 »

Супер, ну спасибо Вам!
Записан
Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #3 : Декабрь 18, 2010, 19:01:42 »

Только лучше делать не через sin и cos, а через lengthdir_x и lengthdir_y.
Идея действительно очень хорошая. И поможет это не только новичкам. Если у меня будет время, тоже подумаю над этим. А то, действительно, немного напрягает вручную подбирать координаты, особенно когда нужно точно сделать.
Записан

Fantom
I am... All of me
Гл. Администратор
*

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

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
API: GameMaker Studio Master
Сообщений: 5026



« Ответ #4 : Декабрь 18, 2010, 19:07:54 »

Ну в общем пока так. Работает правильно, но немного не так в правой верхней четверти (+200 с лишним градусов - не очень удобно, но приемлемо).

Только лучше делать не через sin и cos, а через lengthdir_x и lengthdir_y.
А вот с этими функциями наверно совсем другая формула будет...

upd (19:33):
обновил пример. можно копировать код в буфер обмена, нажав Enter.
...а над новой формулой еще подумать надо. whistling

[прикрепленный документ удален администратором]
« Последнее редактирование: Июнь 04, 2012, 17:48:04 от FanTom » Записан

Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #5 : Декабрь 18, 2010, 19:17:09 »

Да, другая. Покороче и работает быстрее (про это и в справке написано). Примерно так выглядит (это не для данного случая, тут числа другие):
Код:
x=x+lengthdir_x(15,direction-18);
y=y+lengthdir_y(15,direction-18);
Записан

Данила
Участник
****

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

Пол: Мужской
Награды:
За постоянность! [100 дней на форуме]
API: Game Maker 8.0 Pro
Деятельность: Скриптописатель-любитель
Сообщений: 117


WWW
« Ответ #6 : Декабрь 18, 2010, 19:34:33 »

Ну если эта функция действительно быстрее работает, то я думаю что программу лучше всего подстраивать именно под неё.
Записан
Fantom
I am... All of me
Гл. Администратор
*

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

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
API: GameMaker Studio Master
Сообщений: 5026



« Ответ #7 : Декабрь 18, 2010, 19:51:11 »

Ну вот в принципе всё. Под новую формулу пример подстроен ;)
Всё работает. В начале спрашивается название Корпуса, относительно которого рассчитывается положение.
И так же на Enter копируется код в буфер обмена.

[прикрепленный документ удален администратором]
« Последнее редактирование: Июнь 04, 2012, 17:47:36 от FanTom » Записан

S_Kleer
GM Pro user
*

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

Награды:
За лояльность! [+500 репутации]3 место в Дичайшем джеме #82000 сообщений!За постоянность! [50 дней на форуме]Настоящий игродел!2 место на HellRoom Jam #5, Контраст...
API: GameMaker Studio 2
Сообщений: 2734


« Ответ #8 : Декабрь 18, 2010, 19:54:14 »

Ооо! Вау!
Может ещё добавить такую табличку?

"Координаты сохранены в буфер обмена."
Записан

Коты - Мирители
Hummer
scio me nihil scire
GM Pro user
*

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

Пол: Мужской
Награды:
2000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Game Maker!За помощь новичкам!
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 Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
API: GameMaker Studio Master
Сообщений: 5026



« Ответ #10 : Декабрь 18, 2010, 20:03:11 »

Может ещё добавить такую табличку?

"Координаты сохранены в буфер обмена."
Можно. Прикреплено. ;)


[прикрепленный документ удален администратором]
« Последнее редактирование: Июнь 04, 2012, 17:48:30 от FanTom » Записан

S_Kleer
GM Pro user
*

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

Награды:
За лояльность! [+500 репутации]3 место в Дичайшем джеме #82000 сообщений!За постоянность! [50 дней на форуме]Настоящий игродел!2 место на HellRoom Jam #5, Контраст...
API: GameMaker Studio 2
Сообщений: 2734


« Ответ #11 : Декабрь 18, 2010, 20:05:27 »

2. Выбор спрайтов самим пользователем.
Об этом я тоже думал.  

Добавлено: Декабрь 18, 2010, 20:06:42
Ставлю плюсик.  ;)
« Последнее редактирование: Июнь 04, 2012, 17:52:43 от FanTom » Записан

Коты - Мирители
Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #12 : Декабрь 18, 2010, 20:16:39 »

Я думаю можно сделать более универсально: Объекты сделать в виде точек или маленьких кружков. чтобы было видно, где именно находятся их центры. Эту прогу ведь можно использовать не только для прикрепления башни к танку, но и, например, для прикрепления оружия к игроку, и вообще много где.
Записан

Fantom
I am... All of me
Гл. Администратор
*

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

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
API: GameMaker Studio Master
Сообщений: 5026



« Ответ #13 : Декабрь 18, 2010, 20:22:25 »

Объекты сделать в виде точек или маленьких кружков. чтобы было видно, где именно находятся их центры.
Так-то оно так, но размеры разных объектов тоже в большинстве случаев играют важную роль в расположении...

Пример с выбором собственных спрайтов прикреплен ;)

[прикрепленный документ удален администратором]
« Последнее редактирование: Июнь 04, 2012, 17:48:48 от FanTom » Записан

Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #14 : Декабрь 18, 2010, 20:48:11 »

Почему-то не выбираются у меня спрайты  ???
Выбрал, спрайты, а в проге все равно остались стандартные... И еще: При выборе спрайтов у них центр устанавливается по умолчанию в верхний левый угол. Как правило, в игре ценр спрайта устанавливают в другое место. И не всегда в центр... Значит нужно еще добавить выбор центра спрайта+ добавить два объекта, которые будут находиться поверх остальных и будут показывать где находятся центры спрайтов. И желательно сделать выбор цвета для этих объектов-точек (Не известно ведь какого цвета спрайты пользователь будет использовать). Хотя можно сделать, например, белую точку с черной обводкой 
Записан

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

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