Среда, 18 Декабря 2024, 08:28

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Обратиться к объекту столкновения.
LitasДата: Суббота, 03 Сентября 2016, 23:37 | Сообщение # 1
был не раз
Сейчас нет на сайте
Делал RPG. Есть разные объекты(цели). Есть объекты (fireballs, сгустки и прочая магия). Мне нужно как-нибудь обратиться к объекту, с которым будет сталкиваться магия, чтобы наносить ему урон. obj_zel.hp -= ... не катит. Т.е магия должна отнимать хп у объекта, с которым столкнулась(типа объектстолкновения.hp -= ...). Как получить название/айди этого объекта?
QvantДата: Суббота, 03 Сентября 2016, 23:58 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
в событии столкновения , объект с котором столкнулись - other
LitasДата: Воскресенье, 04 Сентября 2016, 00:15 | Сообщение # 3
был не раз
Сейчас нет на сайте
А можно сделать так, чтобы снаряд сам определял объект, с которым столкнулся, а потом обращался к нему. Совершенно разных существ в игре не мало, проделывать collision event для каждого не очень. Потому и создал тему. Можно ли так сделать?
Ex.
if collision_point(x,y,объект столкновения, который определяется,0,0)
{
объект столкновения, который определяется.hp -= ...
}
Думаю, нужно сделать переменную (target), которая будет равняться объекту с которым было столкновение, но как так сделать?
QvantДата: Воскресенье, 04 Сентября 2016, 00:47 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
просто в событии other и будет id объекта с которым он солкнулся
LitasДата: Воскресенье, 04 Сентября 2016, 01:02 | Сообщение # 5
был не раз
Сейчас нет на сайте
В событии collision у меня только список объектов. Написал так в степе магии
Код
if collision_point(x,y,other,0,0)
{
instance_destroy()
other.hp -= ...
}

но это не правильно и столкновение не происходит.
ЛеонидДата: Воскресенье, 04 Сентября 2016, 08:44 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Other работает так, как написал тебе Qvant, , только в событии столкновения. Если ты не хочешь его использовать (я, правда, не вижу на то причин), то можно сделать и через степ.
Функции проверки столкновений (в твоем случае collision_point) сами возвращают id объекта, с которым происходит столкновение (или noone, если его не происходит).
Также, тебе следует создать родительский объект для всех противников и проверять столкновения с ним.
В итоге код должен выглядеть как-то так:
Код
enemy = collision_point(x,y,obj_enemy_parent,0,0); //значение enemy приравнивается к id объекта, с которым сталкиваемся (если его родительский объект - obj_enemy_parent)
if enemy != noone // если столкновение произошло
  {
  enemy.hp -= dmg;
  }

Не проверял, но должно работать (если верить справке Game Maker Studio).

П.С. Что за список объектов у тебя в событии collision?


Сообщение отредактировал Леонид - Воскресенье, 04 Сентября 2016, 08:45
LitasДата: Воскресенье, 04 Сентября 2016, 17:04 | Сообщение # 7
был не раз
Сейчас нет на сайте
Спасибо, Леонид +. Все работает, как я хотел. Спасибо, Qvant +. Но почему не получается сделать через collision? Вроде все правильно. Other в событии столкновения. Может, я не правильно его использую? Можете примерчик написать, если не сложно. Буду очень благодарен+.
ЛеонидДата: Воскресенье, 04 Сентября 2016, 19:04 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Было бы легче, если бы ты выложил.
Цитата Litas ()
Но почему не получается сделать через collision? Вроде все правильно. Other в событии столкновения.
Ты же писал, что ты в step это вставлял, а не в столкновение.
LitasДата: Воскресенье, 04 Сентября 2016, 21:45 | Сообщение # 9
был не раз
Сейчас нет на сайте
Я потом исправил. Записал это в столкновение, но снаряд никак вообще не реагирует на цель. А так вообще можно?
Код

if collision_point(x,y,other,0,0)
{
instance_destroy()
other.hp -= ...
}
TymonrДата: Воскресенье, 04 Сентября 2016, 21:56 | Сообщение # 10
With OpenSource forever
Сейчас нет на сайте
Litas, если он движется слишком быстро и является слишком маленьким - то будет пролетать насквозь.
Используй длинные палки, длина которых равна скорости движения


Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как победитель — спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы.
Как правильно задавать вопросы в технических форумах
LitasДата: Воскресенье, 04 Сентября 2016, 22:23 | Сообщение # 11
был не раз
Сейчас нет на сайте
Цитата Tymonr ()
Litas, если он движется слишком быстро и является слишком маленьким - то будет пролетать насквозь.
Используй длинные палки, длина которых равна скорости движения

Не в этом дело. Для теста я сделал следование магии за мышкой. И при наведении на цель, магия просто залетает на спрайт цели
TymonrДата: Воскресенье, 04 Сентября 2016, 23:23 | Сообщение # 12
With OpenSource forever
Сейчас нет на сайте
Litas, коллайдеры-то поставил?)

Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как победитель — спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы.
Как правильно задавать вопросы в технических форумах
  • Страница 1 из 1
  • 1
Поиск:

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