Вызов события по клику мыши на объекте нарисованном в GUI
|
|
zillkor | Дата: Среда, 20 Сентября 2017, 01:21 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Подскажите новичку. Реализовал событие Draw GUI у объекта, рисуется там прямоугольник. Пытаюсь сделать событие mouse left pressed, но при нажатии на прямоугольник мышкой событие не срабатывает.
С спрайтом если сделать то все хорошо будет, а вот если нарисовал объект просто draw_rectangle то события клика не срабатывает.
Вот проектик с примером того что я говорю https://yadi.sk/d/s8hhB12d3N4LUs. Дебаг сообщение при клике мышки не выводится.
|
|
| |
ASH2 | Дата: Среда, 20 Сентября 2017, 12:28 | Сообщение # 2 |
участник
Сейчас нет на сайте
| zillkor, а разве в принципе должно срабатывать? draw_rectangle это ж вроде тупо отрисовка квадрата, ничего ты с ним не сделаешь, меняй сам объект или подгоняй его спрайт под размеры своего отрисованого квадрата.
Карсон и Питееерс!!!
|
|
| |
zillkor | Дата: Среда, 20 Сентября 2017, 16:19 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Тоесть, без спрайта я вызов события не получу? Мне надо рисовать в любом случае спрайт и его либо сверху закрашивать тем что надо, либо сразу рисовать что надо. Хотя как это сделать, если у тебя нарпимер кнопка, разныой ширины.
|
|
| |
ASH2 | Дата: Среда, 20 Сентября 2017, 16:38 | Сообщение # 4 |
участник
Сейчас нет на сайте
| zillkor, Что значит "кнопка разной ширины?". Не понял. Кнопка она одна, она не может быть разной ширины. Если же у тебя 1 кнопка на которую ты через внешний код накидываешь спрайт для отрисовки через draw - так закинь этот спрайт и в sprite_index этого экземпляра.
Карсон и Питееерс!!!
|
|
| |
zillkor | Дата: Среда, 20 Сентября 2017, 17:39 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Цитата ASH2 ( ) zillkor, Что значит "кнопка разной ширины?". Не понял. Кнопка она одна, она не может быть разной ширины. Если же у тебя 1 кнопка на которую ты через внешний код накидываешь спрайт для отрисовки через draw - так закинь этот спрайт и в sprite_index этого экземпляра.
Есть объект который через Draw GUI рисует прямоугольник (кнопку), используя свое поле width и height, например один экземпляр рисует шириной 100, высотой 20, другой шириной 200, высотой 10. Две разных кнопки, два экземпляра одного объекта. Спрайты вообще не используются никак. Встаёт вопрос как мне в объекте уловить нажатие мыши по любому из прямоугольников экземпляра.
Вся вообще ситуация в том что кнопка, это часть интерфейса и я ее пытаюсь рисовать через GUI, чтобы не рисовать 5 разных кнопок разной ширины кнопка рисуется в зависимости от заданной ширины. А вот обработать нажатие мышкой не могу.
Например сейчас у меня есть вот такой код (в Step), и вроде как нажатие мышки улавливается, но что-то с координатами напутал, не работает как часы.
Код if (mouse_check_button_pressed(mb_left)) { var xx = x + camera_get_view_x(view_camera[0]); var yy = y + camera_get_view_y(view_camera[0]); if (point_in_rectangle(mouse_x, mouse_y, xx, yy, xx + width, yy + width)) {
switch (type) { case "continue": room_goto(rm_space); break;
case "newgame": room_goto(rm_space); break;
case "exit": game_end(); break; }
} }
Добавлено (20 сентября 2017, 17:39) --------------------------------------------- Перепутал там два раза написал width. Вроде заработало. Но вообще такой подход - это не велосипед?
|
|
| |
Space_worm | Дата: Среда, 20 Сентября 2017, 20:06 | Сообщение # 6 |
уже был
Сейчас нет на сайте
| Цитата zillkor ( ) Перепутал там два раза написал width. Вроде заработало. Но вообще такой подход - это не велосипед?
По-моему, не велосипед. С помощью DrawGUI других способов не знаю.
Вот тебе пример реализации кнопки:
В Create:
// button coordinates and bounds btn_x = display_get_gui_width() - (sprite_get_width(spr_button)-sprite_get_xoffset(spr_button)) - 200; btn_y = display_get_gui_height() - (sprite_get_height(spr_button)-sprite_get_yoffset(spr_button)) - 100; btn_img = 0; btn_bbox_bottom = btn_y + (sprite_get_height(spr_button)-sprite_get_yoffset(spr_button)); btn_bbox_top = btn_y - sprite_get_yoffset(spr_button); btn_bbox_right = btn_x + (sprite_get_width(spr_button)-sprite_get_xoffset(spr_button)); btn_bbox_left = btn_x - sprite_get_xoffset(spr_button);
// масштаб интерфейса относительно вида в игре display_scale_x = display_get_gui_width()/view_wview[view_current]; display_scale_y = display_get_gui_height()/view_hview[view_current];
over_btn = 0; // Курсор над кнопкой pressed = 0; //Кнопка нажата
В Step:
// Координаты мыши в интерфейсе global.gui_mouse_x = (mouse_x - view_xview[view_current]) * display_scale_x; global.gui_mouse_y = (mouse_y - view_yview[view_current]) * display_scale_y;
over_btn = (global.gui_mouse_x > btn_bbox_left)&&(global.gui_mouse_x < btn_bbox_right)&&(global.gui_mouse_y > btn_bbox_top)&&(global.gui_mouse_y < btn_bbox_bottom);
if (mouse_check_button_pressed(mb_left)) { pressed = 1; }
Сообщение отредактировал Space_worm - Среда, 20 Сентября 2017, 20:07 |
|
| |