Пятница, 19.04.2024, 04:51
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Разработка игр » Вопросы по game maker » Общие вопросы по Game Maker 6/7/8/Studio (Тут задают простые вопросы, не требующие отдельной темы)
Общие вопросы по 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 классе, тригонометрию еще не проходили. Так что пытался понять все сам, что довольно непросто.
Спасибо за объяснения, но код не работает. Если честно, уже не удивительно smile Я несколько дней искал по всему интернету решение этой проблемы, но так и не нашел. Были, конечно, подробные объяснения с хорошими алгоритмами, но и они работали немного криво.
В общем, единственное решение - попытаться объяснить , что именно мне нужно, и может такой профессионал, как ты, мне все-таки поможет :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 ()
Теперь у тебя будет повод учить геометрию
Еще какой повод biggrin Я вообще в школе учу только те предметы, которые с программированием связаны) Раньше думал, что геометрия бесполезна, а теперь интересно стало.
Кстати, я поставил сюда 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) (либо я что-то неправильно понял?)
Я всё правильно тебя понял. Лучше обратись к учителю математики. Не стесняйся smile


Для ваших вопросов по 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
Хоть кто-то общаеться  smile
 
никитаДата: Суббота, 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 одновременно, но все равно фон дергается при движении вида, что не очень приятно. Есть ли решение?
 
Форум » Разработка игр » Вопросы по game maker » Общие вопросы по Game Maker 6/7/8/Studio (Тут задают простые вопросы, не требующие отдельной темы)
Поиск: