Вторник, 25 Февраля 2020, 06:11

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Определение ID обьекта при наведении на него курсора мыши. (Хотелось бы узнать несколько возможных способов.)
Определение ID обьекта при наведении на него курсора мыши.
aFriendДата: Пятница, 28 Марта 2014, 21:09 | Сообщение # 1
участник
Сейчас нет на сайте
Иногда необходимo узнать ID обьекта, на который указывает курсор мыши.
Хотелось бы узнать какими способами пользуетесь вы и какой способ наиболее правильный.

Чтобы никто не подумал, что я не умею пользоваться справкой или просто бездельник, предлагаю свои варианты:

Вариант номер один:
Я создал 2 обьекта (1 обьект - это обьект у которого я определяю ID, а 2 обьект просто выводит информацию)
Я создал переменную global.ID
В обьекте номер один используется следующий код:
Код
Mouse Event for Mouse Enter:
global.ID = id // глобальной переменной ID присваивается стандартная переменная id (которая содержит идентификатор обьекта)

Mouse Event for Mouse Leave:
global.ID = 0 // "очищаем" глобальную ID
       

Во втором
Код
Draw Event:
draw_text(0,0,global.ID) // пишем на экране id обьекта


Все работает, более того первый обьект можно сделать родителем какого-нибудь обьекта чтобы не писать код в каждом.

Вариант номер два:
Я создал 2 обьекта (1 обьект - это обьект у которого я определяю ID, а 2 обьект просто выводит информацию)
В первом обьекте нет ни строчки кода, но зато во втором имеется такой:
Код
Draw Event:
if(instance_exists(обьект 1)){ // проверяем, существует ли обьект и, если существует, то
instance = instance_nearest(mouse_x,mouse_y,обьект 1) // в переменную instance записываем id обьекта 1
if(point_distance(mouse_x,mouse_y,instance.x,instance.y) <= 16){ // если расстояние от курсора мыши до нашего обьекта 1 меньше либо равно 16, то
draw_text(0,0,instance) пишем на экране id обьекта 1
}

Все работает!
Так же как и в первом варианте обьект 1 может быть родителем.

Оба способа работают, как вы считаете какой лучше?


Сообщение отредактировал aFriend - Пятница, 28 Марта 2014, 21:10
GFRONTДата: Пятница, 28 Марта 2014, 21:40 | Сообщение # 2
частый гость
Сейчас нет на сайте
Код
global.ID=istance_place(mouse_x,mouse_y,all)
через любой объект, лал.


Мой бложик
aFriendДата: Пятница, 28 Марта 2014, 21:48 | Сообщение # 3
участник
Сейчас нет на сайте
GFRONT, а бывает такое, что мне не нужны все обьекты?
lisiyrakДата: Суббота, 29 Марта 2014, 00:31 | Сообщение # 4
Hero of bacon
Сейчас нет на сайте
aFriend,

Код
global.ID = collision_rectangle(mouse_x-1,mouse_y-1,mouse_x+1,mouse_y+1,<объект, id которого ты хочешь узнать при наведении мыши>,0,0)
aFriendДата: Суббота, 29 Марта 2014, 14:59 | Сообщение # 5
участник
Сейчас нет на сайте
lisiyrak, Благодарю.

Еще варианты?
XDominatorДата: Понедельник, 31 Марта 2014, 10:40 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Так может просто в нужных объектах проверять раз в энное количество шагов функцию collision_point(mouse_x, mouse_y, id, false, false) != -4
? Если возвращает не -4 - значит мышь наведена на наш инстанс. Неуверен что можно поставить id как параметр здесь, возможно нужно ставить имя объекта.


Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
aFriendДата: Понедельник, 31 Марта 2014, 16:04 | Сообщение # 7
участник
Сейчас нет на сайте
XDominator, мне кажется что будет грузить проц сильно этот способ
XDominatorДата: Понедельник, 31 Марта 2014, 16:47 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
делай проверку раз в 10-15 тиков, и абсолютно не заметишь разницы. А если нужно список инстансов с которыми проверяется коллизия, то список прошелших проверку можно складывать например в ds_list

Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
aFriendДата: Понедельник, 31 Марта 2014, 21:08 | Сообщение # 9
участник
Сейчас нет на сайте
XDominator, зачем так запариваться, если можно просто создать родителя для всех обьектов и проверять коллизию уже с ним?
XDominatorДата: Вторник, 01 Апреля 2014, 09:56 | Сообщение # 10
постоянный участник
Сейчас нет на сайте
как один из вариантов реализации - вполне можно, почему бы и нет. Но ты же спрашивал совета, я тебе сказал от чего отталкивался бы сам smile А уж как ты будешь проверять - внутри объектов, через родителя, или в специально отведенном объекте - дело сугубо личное, и принципиальной разницы кроме удобства реализации, не имеет, а удобство - вещь крайне субъективная. Поюзай collision point, очень удобная штука, мне понравилась.

Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
aFriendДата: Вторник, 01 Апреля 2014, 23:53 | Сообщение # 11
участник
Сейчас нет на сайте
Цитата XDominator ()
как один из вариантов реализации - вполне можно, почему бы и нет.

Ты прав, а почему бы и нет? biggrin

Цитата XDominator ()
Но ты же спрашивал совета

Ты почти прав: я просил не совета, а просто хотел узнать какими бы способами люди воспользовались в данной ситуации

Цитата XDominator ()
А уж как ты будешь проверять - внутри объектов, через родителя, или в специально отведенном объекте - дело сугубо личное, и принципиальной разницы кроме удобства реализации, не имеет

Чем больше кода я напишу и чем больше действий процессор заставлю совершать тем сильнее будет "лагать" игра, разве не так?)

Цитата XDominator ()
Поюзай collision point, очень удобная штука, мне понравилась.

Юзаю, но не в этом случае, спасибо)
XDominatorДата: Среда, 02 Апреля 2014, 09:06 | Сообщение # 12
постоянный участник
Сейчас нет на сайте
Цитата aFriend ()
Чем больше кода я напишу и чем больше действий процессор заставлю совершать тем сильнее будет "лагать" игра, разве не так?)


само собой. Но все стандартные функции и возможности языка так или иначе все равно являются набором простых, и если ты используешь сложную функцию, или аналогичный ей набор простых - то тут разницы как бы не будет, кроме той что, возможно, В своей реализации ты сможешь немного оптимизировать свои процессы. В данном конкретном случае - прописывая чеки в конкретных объектах, тебе будет проще управлять отсеиванием ненужных инстансов, что через родительские объекты будет сделать малость сложнее. Но в целом - это все настолько мелочи и нюансы, что про них и говорить то в общем, нет смысла smile


Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
aFriendДата: Среда, 02 Апреля 2014, 15:51 | Сообщение # 13
участник
Сейчас нет на сайте
Цитата XDominator ()
В данном конкретном случае - прописывая чеки в конкретных объектах, тебе будет проще управлять отсеиванием ненужных инстансов, что через родительские объекты будет сделать малость сложнее

Наверное дело в том, что для каждого понятие "удобно" разное, например, мне, удочерить все нужные обьекты быстрее)

Цитата XDominator ()
Малость сложнее

Мне, например, сложно отнести слова "Сложно" или "Никак" к Гамаку, ведь в Гамаке один из самых простых и легкозапоминающихся языков программирования (даже языком программирования его сложно назвать) для того чтобы им пользоваться необходимо лишь обладать логикой и мышлением, ну, иногда требуются баазовые знания алгебры и геометрии biggrin

Цитата aFriend ()
Никак

PS: используя dll можно ревлизовать практически все


Сообщение отредактировал aFriend - Среда, 02 Апреля 2014, 15:51
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Определение ID обьекта при наведении на него курсора мыши. (Хотелось бы узнать несколько возможных способов.)
  • Страница 1 из 1
  • 1
Поиск:

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