Определение 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)
KEKW
|
|
| |
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 |
постоянный участник
Сейчас нет на сайте
| как один из вариантов реализации - вполне можно, почему бы и нет. Но ты же спрашивал совета, я тебе сказал от чего отталкивался бы сам А уж как ты будешь проверять - внутри объектов, через родителя, или в специально отведенном объекте - дело сугубо личное, и принципиальной разницы кроме удобства реализации, не имеет, а удобство - вещь крайне субъективная. Поюзай collision point, очень удобная штука, мне понравилась.
Ghaarp
The soul lighter(Android, logic)
Zzzzombie RAGE!!!(For android)
|
|
| |
aFriend | Дата: Вторник, 01 Апреля 2014, 23:53 | Сообщение # 11 |
участник
Сейчас нет на сайте
| Цитата XDominator ( ) как один из вариантов реализации - вполне можно, почему бы и нет. Ты прав, а почему бы и нет?
Цитата XDominator ( ) Но ты же спрашивал совета Ты почти прав: я просил не совета, а просто хотел узнать какими бы способами люди воспользовались в данной ситуации
Цитата XDominator ( ) А уж как ты будешь проверять - внутри объектов, через родителя, или в специально отведенном объекте - дело сугубо личное, и принципиальной разницы кроме удобства реализации, не имеет Чем больше кода я напишу и чем больше действий процессор заставлю совершать тем сильнее будет "лагать" игра, разве не так?)
Цитата XDominator ( ) Поюзай collision point, очень удобная штука, мне понравилась. Юзаю, но не в этом случае, спасибо)
|
|
| |
XDominator | Дата: Среда, 02 Апреля 2014, 09:06 | Сообщение # 12 |
постоянный участник
Сейчас нет на сайте
| Цитата aFriend ( ) Чем больше кода я напишу и чем больше действий процессор заставлю совершать тем сильнее будет "лагать" игра, разве не так?)
само собой. Но все стандартные функции и возможности языка так или иначе все равно являются набором простых, и если ты используешь сложную функцию, или аналогичный ей набор простых - то тут разницы как бы не будет, кроме той что, возможно, В своей реализации ты сможешь немного оптимизировать свои процессы. В данном конкретном случае - прописывая чеки в конкретных объектах, тебе будет проще управлять отсеиванием ненужных инстансов, что через родительские объекты будет сделать малость сложнее. Но в целом - это все настолько мелочи и нюансы, что про них и говорить то в общем, нет смысла
Ghaarp
The soul lighter(Android, logic)
Zzzzombie RAGE!!!(For android)
|
|
| |
aFriend | Дата: Среда, 02 Апреля 2014, 15:51 | Сообщение # 13 |
участник
Сейчас нет на сайте
| Цитата XDominator ( ) В данном конкретном случае - прописывая чеки в конкретных объектах, тебе будет проще управлять отсеиванием ненужных инстансов, что через родительские объекты будет сделать малость сложнее Наверное дело в том, что для каждого понятие "удобно" разное, например, мне, удочерить все нужные обьекты быстрее)
Цитата XDominator ( ) Малость сложнее Мне, например, сложно отнести слова "Сложно" или "Никак" к Гамаку, ведь в Гамаке один из самых простых и легкозапоминающихся языков программирования (даже языком программирования его сложно назвать) для того чтобы им пользоваться необходимо лишь обладать логикой и мышлением, ну, иногда требуются баазовые знания алгебры и геометрии
Цитата aFriend ( ) Никак PS: используя dll можно ревлизовать практически все
Сообщение отредактировал aFriend - Среда, 02 Апреля 2014, 15:51 |
|
| |
|