Общие вопросы по Game Maker 6/7/8/Studio
|
|
BRESS | Дата: Вторник, 09.02.2016, 18:16 | Сообщение # 841 |
Мастер-ломастер
Группа: Администраторы
Сообщений: 3120
Награды: 1
Репутация: 224
Статус: Offline
| Цитата никита ( ) Я знаю, что это связано с углами: синус, косинус... Но я так и не понял, что это такое и как этими функциями пользоваться. Кто может подсказать, как реализовать point_direction? Прости, что так поздно. Если ты еще не сделал всё сам, рекомендую обратиться к геометрии за 8 класс. Тут всё слишком просто, но на всякий случай распишу.
Вот рисунок, чтоб ты ориентировался. Итак, у нас есть точка x1,y1 и x2,y2. Из первой точки проведем отрезок, перпендикулярный OX, чтобы образовался прямоугольный треугольник. Длина стороны A будет равна x2-x1. Длина стороны B будет равна y2-y1. По теореме Пифагора находим сторону C.
Найдем синус угла α. Это отношение противолежащего катета к гипотенузе, то бишь a/c. Ну а далее просто при помощи Arcsin получаешь угол. Обрати внимание, что скорей всего ты получишь угол в радианах.
Примерный алгоритм GM-Style:
Код a=x2-x1; b=y2-y1; c=sqrt(a*a+b*b); angle=arcsin(a/c);
Для ваших вопросов по Game Maker есть специально созданный форум. Оставьте в покое мою личку. Спасибо за внимание!
|
|
| |
никита | Дата: Вторник, 09.02.2016, 20:17 | Сообщение # 842 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| Цитата BRESS ( ) Если ты еще не сделал всё сам, рекомендую обратиться к геометрии за 8 класс. Нет, не сделал. Хоть я сейчас и в 8 классе, тригонометрию еще не проходили. Так что пытался понять все сам, что довольно непросто. Спасибо за объяснения, но код не работает. Если честно, уже не удивительно Я несколько дней искал по всему интернету решение этой проблемы, но так и не нашел. Были, конечно, подробные объяснения с хорошими алгоритмами, но и они работали немного криво. В общем, единственное решение - попытаться объяснить , что именно мне нужно, и может такой профессионал, как ты, мне все-таки поможет :D Я пишу игру на Java. Свою первую игру, притом многие строки скатывая с инета. И вот нашлось то, что с инета не скатать. И так, у класса Bullet (пуля) есть поле direction, значение которого я и пытаюсь высчитать. А вот двигается она с помощью метода:
Код double dx = Math.sin(Math.toRadians(direction)); double dy = Math.cos(Math.toRadians(direction)); x += dx * speed; y += dy * speed; Кстати, если direction = 0, то пуля будет лететь вниз, а не вправо, как в GM. Твой код я записал в этот метод:
Код double Angle(double x1, double y1, double x2, double y2) { double a=x2-x1; double b=y2-y1; double c= Math.sqrt(a*a+b*b); double angle= Math.asin(a/c); return angle; } Ну и, как я сказал, это не работает. Я сделал вывод на консоль, выводит следующее (в радианах): И еще кое-что. Это код для GM, так что я его и там проверил. Результат немного отличается, но все же он неверный. Думаю, я немного более открыто разъяснил. Может, появится какая-то новая идея? Заранее спасибо.
ВАСЕЧКА - Попугай
Сообщение отредактировал никита - Вторник, 09.02.2016, 20:18 |
|
| |
BRESS | Дата: Вторник, 09.02.2016, 20:42 | Сообщение # 843 |
Мастер-ломастер
Группа: Администраторы
Сообщений: 3120
Награды: 1
Репутация: 224
Статус: Offline
| Цитата никита ( ) и может такой профессионал, как ты, мне все-таки поможет :D Всю жизнь имел тройку по математике и тут на тебе: профессионал! :D
Без корректировок код, на самом деле, будет корректно работать только в рамках первой четверти оси координат. То есть при направлении пули от 1 до 90. Протести свой код при соответствующих значениях координат и кинь сюда ввод и вывод. Ошибок в вычислениях быть не должно. Если возникнут, будем разбираться.
UPD. Ну вот я, собственно, сделал пример со всеми нужными поправками.
Для ваших вопросов по Game Maker есть специально созданный форум. Оставьте в покое мою личку. Спасибо за внимание!
|
|
| |
никита | Дата: Вторник, 09.02.2016, 21:27 | Сообщение # 844 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| Цитата BRESS ( ) Ну вот я, собственно, сделал пример со всеми нужными поправками. Спасибо большое! Еще немного подправил для Java и все работает :D Код double Angle(double x1, double y1, double x2, double y2) { double a=x2-x1; double b=y2-y1; double c= Math.sqrt(a*a+b*b); double angle= Math.asin(a/c); if(y2 < y1) angle = 135.1 - angle; return angle; }
ВАСЕЧКА - Попугай
|
|
| |
BRESS | Дата: Среда, 10.02.2016, 08:07 | Сообщение # 845 |
Мастер-ломастер
Группа: Администраторы
Сообщений: 3120
Награды: 1
Репутация: 224
Статус: Offline
| Цитата никита ( ) Спасибо большое! Еще немного подправил для Java и все работает :D Теперь у тебя будет повод учить геометрию :)
Для ваших вопросов по Game Maker есть специально созданный форум. Оставьте в покое мою личку. Спасибо за внимание!
|
|
| |
никита | Дата: Среда, 10.02.2016, 14:51 | Сообщение # 846 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| Цитата BRESS ( ) Теперь у тебя будет повод учить геометрию Еще какой повод Я вообще в школе учу только те предметы, которые с программированием связаны) Раньше думал, что геометрия бесполезна, а теперь интересно стало. Кстати, я поставил сюда 135.1 (просто рандом), не знаешь, почему именно это число?Код if(y2 < y1) angle = 135.1 - angle;
ВАСЕЧКА - Попугай
|
|
| |
BRESS | Дата: Среда, 10.02.2016, 16:37 | Сообщение # 847 |
Мастер-ломастер
Группа: Администраторы
Сообщений: 3120
Награды: 1
Репутация: 224
Статус: Offline
| Цитата никита ( ) Кстати, я поставил сюда 135.1 (просто рандом), не знаешь, почему именно это число? Не знаю, почему 135.1. Просвети. Плюс у тебя не преобразован угол в градусы.
Если считаешь в радианах, то корректнее будет так:
Код angle=arcsin(a/c); if mouse_y>y angle=pi-angle else if mouse_x<x angle=2*pi+angle;
Для ваших вопросов по Game Maker есть специально созданный форум. Оставьте в покое мою личку. Спасибо за внимание!
|
|
| |
никита | Дата: Среда, 10.02.2016, 18:53 | Сообщение # 848 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| Цитата BRESS ( ) Не знаю, почему 135.1. Просвети. Это был вопрос, на который я хотел узнать ответ) Кажется, ты подумал, что я тебя спрашиваю, почему я поставил туда 135.1) (либо я что-то неправильно понял?)
ВАСЕЧКА - Попугай
|
|
| |
BRESS | Дата: Четверг, 11.02.2016, 17:03 | Сообщение # 849 |
Мастер-ломастер
Группа: Администраторы
Сообщений: 3120
Награды: 1
Репутация: 224
Статус: Offline
| Цитата никита ( ) Это был вопрос, на который я хотел узнать ответ) Кажется, ты подумал, что я тебя спрашиваю, почему я поставил туда 135.1) (либо я что-то неправильно понял?) Я всё правильно тебя понял. Лучше обратись к учителю математики. Не стесняйся
Для ваших вопросов по Game Maker есть специально созданный форум. Оставьте в покое мою личку. Спасибо за внимание!
|
|
| |
никита | Дата: Четверг, 11.02.2016, 17:07 | Сообщение # 850 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| Цитата BRESS ( ) Лучше обратись к учителю математики. Не стесняйся Я хотел, но все не решался. Я с ней не очень лажу. Кстати, angle = PI - angle отлично работает)
ВАСЕЧКА - Попугай
|
|
| |
BRESS | Дата: Суббота, 13.02.2016, 14:54 | Сообщение # 851 |
Мастер-ломастер
Группа: Администраторы
Сообщений: 3120
Награды: 1
Репутация: 224
Статус: Offline
| Не то, чтобы было что-то сложного в решении, которое я тебе предложил. Просто вы по математике совсем еще не касались тригонометрии, потому мне тяжело что-либо тебе объяснить.
Для ваших вопросов по Game Maker есть специально созданный форум. Оставьте в покое мою личку. Спасибо за внимание!
|
|
| |
никита | Дата: Среда, 30.03.2016, 16:58 | Сообщение # 852 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| В C++, Java и других языках программирования есть классы. В Game Maker они тоже присутствуют, только называются объектами. Если в Java в класс записать переменную и сделать ее статической, то можно будет заимствовать ее у класса без создания экземпляра, т.е. обращаться напрямую к классу, а не к экземпляру этого класса. А вот в GM я никак не могу найти способ обратиться к переменной объекта, если его экземпляра нет в комнате. Возможно ли это сделать?
ВАСЕЧКА - Попугай
|
|
| |
baryhalive | Дата: Суббота, 02.04.2016, 10:58 | Сообщение # 853 |
аааааааа
Группа: Пользователи
Сообщений: 124
Награды: 0
Репутация: 2
Статус: Offline
| Хоть кто-то общаеться
|
|
| |
никита | Дата: Суббота, 02.04.2016, 15:48 | Сообщение # 854 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| Функция move_bounce работает только с объектами. Возможно ли в событие переcечения границ комнаты записать такую функцию, которая отражает объект от границы? Только есть одно условие: проверять за какую (верхнюю или боковую) границу зашел объект нельзя. Так я уже писал и хочу найти способ немного покороче.
ВАСЕЧКА - Попугай
Сообщение отредактировал никита - Суббота, 02.04.2016, 19:59 |
|
| |
Xomafok | Дата: Понедельник, 04.04.2016, 17:57 | Сообщение # 855 |
Известен под логином VS games
Группа: Постоянный
Сообщений: 932
Награды: 2
Репутация: 172
Статус: Offline
| Как сделать так, чтобы фон двигался вместе с игроком без зависаний? Пихал background_x=view_xview в Draw, Begin step, Step и End step одновременно, но все равно фон дергается при движении вида, что не очень приятно. Есть ли решение?
|
|
| |