Определение id объекта в определённой области другого.
|
|
Интернет | Дата: Пятница, 30 Июня 2017, 22:53 | Сообщение # 1 |
постоянный участник
Сейчас нет на сайте
| Есть два объекта: круг, квадрат. Мне нужно, чтобы определялся id квадрата пока в нём находится круг, при этом круг может двигаться как направо так и налево. Пробовал двумя способами.
Код //'В круге'// if place_messing(x,y,o_kwadr){id_n=instance_nearest(x,y,o_kwadr)} Но при этом id не определяется, если круг вышел из квадрата, как показано на рисунке.
И ещё способ.
Код //'В круге'// for(m=0;m<48;m++){ if collision_rectangle(x+m,y-m,x-m,y+m,o_kwadr,0,0){ id_n=instance_nearest(x,y,o_kwadr)}} Получается то же самое. Как добиться того чтобы id определялся до последнего пикселя. Какие ещё есть способы получить id. Ещё можно collision_circle, но спрайт может быть не правильной формы, при этом не больше квадрата. p.s спрайт квадрата 92/92
Сообщение отредактировал Интернет - Пятница, 30 Июня 2017, 22:59 |
|
| |
LunarPixel | Дата: Суббота, 01 Июля 2017, 09:27 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Интернет, зависит от того, зачем именно это нужно. Можно реализовать просто через событие столкновения. Т.е. у квадрата, в событии столкновения с кругом, пишешь id_n=id. Ну или у круга в событии столкновения с квадратом пишешь id_n=other.id.
|
|
| |
vampir0305 | Дата: Суббота, 01 Июля 2017, 10:42 | Сообщение # 3 |
Unity C# Programmer
Сейчас нет на сайте
| Попробуй использовать instance_place
Красочная сюжетно-ориентированная игра-головоломка
|
|
| |
Интернет | Дата: Суббота, 01 Июля 2017, 10:45 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| Скорее всего я не очень корректно задал вопрос. Вот в таком случае, как на рисунке, переменная должна принимать значение id экземпляров с которыми столкнулся круг, в данном случае с 1 и 2, а получается так, что пока столкновение с прошлым не завершено переменная не меняется. Вот кусок кода. В Create круга
Код id_setka=instance_nearest(x,y,setka_1) В Step круга
Код with(o_control){ for(ix=x_n;ix<dlina_setki;ix+=96){ for(iy=y_n;iy<600;iy+=145){ with(other){ if place_meeting(x,y,id_setka){ x_ob=id_setka.x y_ob=id_setka.y other.index_sosd[x_ob,y_ob]=name other.sanet[x_ob,y_ob]=1 } else{ id_setka=instance_position(x,y,setka_1) other.index_sosd[x_ob,y_ob]='' other.sanet[x_ob,y_ob]=0} }} }} Скорее всего id нужно записывать в массив, но в какой.
Сообщение отредактировал Интернет - Суббота, 01 Июля 2017, 11:00 |
|
| |
OpenGOO | Дата: Суббота, 01 Июля 2017, 13:38 | Сообщение # 5 |
почти ветеран
Сейчас нет на сайте
| В Step круга
Код for (var i = 0; i < instance_number(obj_name); ++i) { var inst = instance_find(obj_name, i); if (place_meeting(x, y, inst)) { // perform an action } }
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
Интернет | Дата: Суббота, 01 Июля 2017, 13:53 | Сообщение # 6 |
постоянный участник
Сейчас нет на сайте
| Спасибо. Заработало.
Сообщение отредактировал Интернет - Суббота, 01 Июля 2017, 14:16 |
|
| |