Среда, 27 Ноября 2024, 21:04

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Вызов события по клику мыши на объекте нарисованном в 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
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг