Управление мышью в Game maker
|
|
123dima321 | Дата: Пятница, 07 Марта 2014, 12:41 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| В общем плане нужно, чтобы управление персонажем осуществлялось с помощью мыши. Необходимо, чтобы выполнялось 5 различных действий:
Нажал, резко мышью вправо, отпустил -> 1 действие Нажал, резко мышью влево, отпустил -> 2 действие Нажал, резко мышью вверх, отпустил -> 3 действие Нажал, резко мышью вниз, отпустил -> 4 действие Просто нажал, отпустил -> 5 действие
Щелчки мышью осуществляются в любом месте комнаты...
Делаю так: в объекте o_game, в событии mouse_left_pressed, пишу код:
в объекте o_game, в событии mouse_left_releassed, пишу код: Код if kn<mouse_x then instance_create(0,0,o_pac_right) else instance_create(0,0,o_pac_left)
в объекте o_pac_right выполняются соответствующие действия, после он удаляется
Так вот, цикл не работает полностью((( При выполнении срабатывает (не с первого раза) только 1 действие( Пробовал даже в объекте o_game события запихивать в начальный шаг и конечный... Помогите, плиз!!!
|
|
| |
XDominator | Дата: Пятница, 07 Марта 2014, 15:35 | Сообщение # 2 |
постоянный участник
Сейчас нет на сайте
| Я мало че понял, но одно могу сказать точно - if это не цикл.
Для реализации того что ты хочешь, потребуется более сложный код чем то что ты представил. Ты не можешь провести мышью идеально вверх или вниз без отклонений по x координате например, тоже самое относится и к x координате - всегда будет отклонение вверх или вниз. Я бы пользовался другим кодом.
Код object controller:
create event: action_type = -1 - отвечает за действие, определяемое нашим движение. -1 - необрабатываемое значение action_enabled = true - блокиратор на управление xsaved = 0; ysaved = 0; angle = 0:
step event
if action_type > -1 { switch(action_type) { case 0: show_message("up") break;
case 1: show_message("down") break;
case 2: show_message("left") break;
case 3: show_message("right") break; } action_enabled = true action_type = -1 }
global_mouse_pressed: if action_enabled { action_enabled = false xsaved = mouse_x ysaved = mouse_y }
global_mouse_released://представим нашу рабочую область как круг с перекрестием в центре на весь размер круга. Перекрестие образует 4 сектора внутри круга. Определяем сектор, в котором находится курсор, и по нему определяем тип действия:
if action_enabled = false { angle = point_direction(xsaved, ysaved, mouse_x, mouse_y) if angle > 315 or angle <= 45 action_type = 3 - правый сектор if angle <= 135 and angle > 45 action_type = 0 - верхний сектор if angle <= 225 or angle > 135 action_type = 2 - левый сектор if angle <= 315 or angle > 225 action_type = 1 - нижний сектор }
Могу напутать со знаками, но должно работать. Пробуй.
Ghaarp
The soul lighter(Android, logic)
Zzzzombie RAGE!!!(For android)
Сообщение отредактировал XDominator - Пятница, 07 Марта 2014, 15:37 |
|
| |
123dima321 | Дата: Пятница, 07 Марта 2014, 20:10 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| XDominator, Спасибо большое))) Код, то что нужно!!! Все супер, получилось!!! Лови +
Сообщение отредактировал 123dima321 - Пятница, 07 Марта 2014, 20:10 |
|
| |
Sanchez06 | Дата: Воскресенье, 09 Марта 2014, 11:41 | Сообщение # 4 |
участник
Сейчас нет на сайте
| Я думаю, можно еще проверять расстояние между xsaved,ysaved и mouse_x,mouse_y, чтобы идеально получался простой клик мышью - вводится погрешность. Также можно проверять пропорцию между размером х-координаты и игрек (например, если икс координата больше, то и движение идет по горизонтали, если у - по вертикали). Но если и этот код работает, то отлично.
|
|
| |
123dima321 | Дата: Воскресенье, 09 Марта 2014, 14:00 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| )
Сообщение отредактировал 123dima321 - Воскресенье, 09 Марта 2014, 14:35 |
|
| |
XDominator | Дата: Среда, 12 Марта 2014, 09:07 | Сообщение # 6 |
постоянный участник
Сейчас нет на сайте
| Не вдаваясь в подробности, функция point_direction по сути и определяет отношения между x/y координатами(проекциями) через простейшую тригонометрию, просто если это уже нормально реализовано средствами гамака, зачем это делать еще раз?
Ghaarp
The soul lighter(Android, logic)
Zzzzombie RAGE!!!(For android)
|
|
| |