Соединить два объекта
| |
vampir0305 | Дата: Пятница, 04 Сентября 2015, 18:43 | Сообщение # 1 |
Unity C# Programmer
Сейчас нет на сайте
| Сделал врага в игре и отдельно тело и голову, чтобы при попадании пули в голову был крит.урон, но если создать несколько одинаковых врагов в комнате, то при удалении врага удаляются все в комнате, как исправить?
Красочная сюжетно-ориентированная игра-головоломка
|
|
| |
Леонид | Дата: Пятница, 04 Сентября 2015, 19:19 | Сообщение # 2 |
постоянный участник
Сейчас нет на сайте
| Я не понял связи между названием темы и проблемой. Код можно?
|
|
| |
vampir0305 | Дата: Пятница, 04 Сентября 2015, 21:16 | Сообщение # 3 |
Unity C# Programmer
Сейчас нет на сайте
| Ах да, совсем забыл. Итак, объект врага Step: Код if hp<=0 {instance_destroy()} Объект головы врага Step:Код if distance_to_object(obj_vrag) > 32 { instance_destroy(); } Ещё одно событие в объекте головы End Step: Код if instance_exists(obj_vrag) > 0 { if obj_man.x < x { x = obj_vrag.x-4 y = obj_vrag.y-16 image_xscale = -1 } else { x = obj_vrag.x+4 y = obj_vrag.y-16 image_xscale = 1 } }
Красочная сюжетно-ориентированная игра-головоломка
|
|
| |
Syank | Дата: Суббота, 05 Сентября 2015, 00:11 | Сообщение # 4 |
участник
Сейчас нет на сайте
| Тебе надо в коде врага создавать объект головы в таком случае с получением её id. А потом уже через id работать именно с этой головой. P.S. instance_exists вроде как возвращает только false/true
Сообщение отредактировал Syank - Суббота, 05 Сентября 2015, 00:12 |
|
| |
vampir0305 | Дата: Суббота, 05 Сентября 2015, 08:06 | Сообщение # 5 |
Unity C# Programmer
Сейчас нет на сайте
| Syank, а как это сделать?
Красочная сюжетно-ориентированная игра-головоломка
|
|
| |
YellowAfterlife | Дата: Суббота, 05 Сентября 2015, 09:20 | Сообщение # 6 |
Сейчас нет на сайте
| Цитата vampir0305 ( ) Syank, а как это сделать? Создание головы в объекте врага: head = instance_create(x + 4, y - 16, obj_head) head.body = id Теперь враг знает, где его голова, а голова знает, где сам враг. Событие шага головы можно убрать; End Step сделать как if (instance_exists(body)) { if body.x < x { x = body.x-4 y = body.y-16 image_xscale = -1 } else { x = body.x+4 y = body.y-16 image_xscale = 1 } } else instance_destroy() То есть голова ставится на предназначенное для нее тело, и удаляется если оно исчезло. (полагаю, ещё лучше сделать переменную, отвечающую за направление обзора, а не сверять координаты)
|
|
| |
vampir0305 | Дата: Суббота, 05 Сентября 2015, 09:52 | Сообщение # 7 |
Unity C# Programmer
Сейчас нет на сайте
| YellowAfterlife, спс, это помогло только для головы, но при убийстве врага удаляются все его экземпляры.
Красочная сюжетно-ориентированная игра-головоломка
|
|
| |
Леонид | Дата: Суббота, 05 Сентября 2015, 16:31 | Сообщение # 8 |
постоянный участник
Сейчас нет на сайте
| Какой код убийства врага и у какого объекта он находится?
|
|
| |
vampir0305 | Дата: Воскресенье, 06 Сентября 2015, 19:08 | Сообщение # 9 |
Unity C# Programmer
Сейчас нет на сайте
| Код убийства находиться в самом враге и включается при условии что hp<=0. В Step врага: Код if hp<=0 {instance_destroy()} Добавлено (06 сентября 2015, 19:08) --------------------------------------------- Что, никто не знает?
Красочная сюжетно-ориентированная игра-головоломка
|
|
| |
Леонид | Дата: Воскресенье, 06 Сентября 2015, 19:22 | Сообщение # 10 |
постоянный участник
Сейчас нет на сайте
| Это должно работать, ищи ошибку где-нибудь.
|
|
| |
vampir0305 | Дата: Воскресенье, 06 Сентября 2015, 20:26 | Сообщение # 11 |
Unity C# Programmer
Сейчас нет на сайте
| Мне одно не понятно, за что отвечает переменная body и где она объявляется. Добавлено (06 сентября 2015, 19:58) --------------------------------------------- Блин, не могу всё-таки ошибку найти, головы создаются для всех экземпляров врагов, при убийстве одного экземпляра умирают все. И ещё есть healthbar у врагов, и рисуется только у одного(первого), и если тот первый умирает то рисуется у другого. Ещё есть событие у врага за пределами комнаты, и если он за пределами комнаты то удаляется только тот, который за пределами комнаты, и healtbar передаётся второму. И переменная hp у врагов почему-то общая, кто знает как исправить? Добавлено (06 сентября 2015, 20:26) --------------------------------------------- Я понял одну фичу Gm. Если в Step предмета стоит код проверки на удаление то есть если значение равно чему-то то удалить объект, то удаляются все экземпляры объекта.
Красочная сюжетно-ориентированная игра-головоломка
|
|
| |
Anthem | Дата: Воскресенье, 06 Сентября 2015, 22:36 | Сообщение # 12 |
Д'Артаньян
Сейчас нет на сайте
| Цитата vampir0305 ( ) Мне одно не понятно, за что отвечает переменная body и где она объявляется. Это не переменная, а название объекта тела врага. Ты же не написал, как он называется Плюс, ты неправильно работаешь с хп врагов, поэтому оно у всех становится = 0 и враги удаляются. Как исправить, никто не знает, так как никто не в курсе, как ты сам это делаешь
Текстовый контент для вашей игры (бесплатно) Сценарист, геймдизайнер для Вашей игры
|
|
| |
vampir0305 | Дата: Понедельник, 07 Сентября 2015, 13:29 | Сообщение # 13 |
Unity C# Programmer
Сейчас нет на сайте
| Итак, как я реализую хп врага: Код в создание врага:
Step врага: Код if hp >=100 {hp=100} if hp <= 0 {instance_destroy()}
В столкновении с объектом пуля у врага: Код damage = choose(10,4,6,20,12,5,3,8,30,40,15,25,35)
obj_ciborg.hp-=damage
Красочная сюжетно-ориентированная игра-головоломка
|
|
| |
Леонид | Дата: Понедельник, 07 Сентября 2015, 16:00 | Сообщение # 14 |
постоянный участник
Сейчас нет на сайте
| Цитата vampir0305 ( ) if hp >=100 {hp=100} Можно hp=max(100,hp). Думаю, это медленнее, но выглядит компактнее, и не так существенно в данном случае. Да и зачем больше или равно? Цитата vampir0305 ( ) В столкновении с объектом пуля у врага: Код damage = choose(10,4,6,20,12,5,3,8,30,40,15,25,35)
obj_ciborg.hp-=damage Как и ожидалось. Зачем тебе уточнять obj_ciborg? Из-за этого-то хп отнимается у всех врагов сразу. Если событие уже стоит у врага, то можно просто записать hp-=damage, ты же работаешь с этим определенным экземпляром объекта, а не со всеми. Теперь точно должно работать нормально. Зачем тебе переменная damage вообще? Это не существенно, но я бы записал компактнее, то есть Код hp-=choose(10,4,6,20,12,5,3,8,30,40,15,25,35)
|
|
| |
vampir0305 | Дата: Понедельник, 07 Сентября 2015, 19:15 | Сообщение # 15 |
Unity C# Programmer
Сейчас нет на сайте
| Леонид, спс, как всегда помог. А как быть с объектом головы. Там же хп не отнять просто hp, там надо вот так: Код obj_vrag.hp-тут сколько отнять но если так сделать, то при попадании в голову хп отнимится у всех экземпляров.
Красочная сюжетно-ориентированная игра-головоломка
|
|
| |
Леонид | Дата: Понедельник, 07 Сентября 2015, 19:57 | Сообщение # 16 |
постоянный участник
Сейчас нет на сайте
| Цитата vampir0305 ( ) но если так сделать, то при попадании в голову хп отнимится у всех экземпляров. Тебе YellowAfterlife все хорошо расписал уже.
Сообщение отредактировал Леонид - Понедельник, 07 Сентября 2015, 20:24 |
|
| |
vampir0305 | Дата: Понедельник, 07 Сентября 2015, 20:51 | Сообщение # 17 |
Unity C# Programmer
Сейчас нет на сайте
| Леонид, ах да, всё разобрался. Осталась одна фигня. У врагов health bar стоит и как его сделать чтобы отображался одновременно у всех врагов а не по очереди пока не убьёшь первого и т.д. Код в Draw врага: Код draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha);
draw_sprite(spr_healthbar, 0, obj_vrag.x - 64, obj_vrag.y - 72) draw_sprite_part(spr_healthbar, 1, 0, 0, sprite_get_width(spr_healthbar) * (body.enemy_hp / 100), sprite_get_height(spr_healthbar), obj_vrag.x - 64, obj_vrag.y - 72)
Красочная сюжетно-ориентированная игра-головоломка
Сообщение отредактировал vampir0305 - Понедельник, 07 Сентября 2015, 20:52 |
|
| |
Леонид | Дата: Понедельник, 07 Сентября 2015, 22:04 | Сообщение # 18 |
постоянный участник
Сейчас нет на сайте
| Цитата vampir0305 ( ) draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha); Зачем? В твоем случае draw_sprite сгодится (как и в большинстве других), не нужно использовать такую "длинную" функцию. Не нужны и sprite_get_width(spr_healthbar), если спрайт у тебя не изменяется, его размеры это константы, зачем каждый раз получать их с помощью функции? Это замедляет производительность и делает код менее читаемым. У тебя опять та же ошибка, зачем ссылаешься на объект obj_vrag, если здоровье должно отображаться у каждого отдельного экземпляра? Почему здоровье ты узнаешь через объект body? Если я правильно понимаю, что ты не понимаешь, у тебя явные проблемы с пониманием некоторых базовых вещей (много понимания). Советую почитать справку\посмотреть примеры, нежели вновь и вновь повторять те же ошибки.
|
|
| |
vampir0305 | Дата: Вторник, 08 Сентября 2015, 14:00 | Сообщение # 19 |
Unity C# Programmer
Сейчас нет на сайте
| Всем огромнейшее спасибо за помощь, всё решено.
Цитата Леонид ( ) draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha);
Зачем? В твоем случае draw_sprite сгодится (как и в большинстве других), не нужно использовать такую "длинную" функцию. Не нужны и sprite_get_width(spr_healthbar), если спрайт у тебя не изменяется, его размеры это константы, зачем каждый раз получать их с помощью функции? Это замедляет производительность и делает код менее читаемым. У тебя опять та же ошибка, зачем ссылаешься на объект obj_vrag, если здоровье должно отображаться у каждого отдельного экземпляра? Почему здоровье ты узнаешь через объект body? Если я правильно понимаю, что ты не понимаешь, у тебя явные проблемы с пониманием некоторых базовых вещей (много понимания). Советую почитать справку\посмотреть примеры, нежели вновь и вновь повторять те же ошибки.
Спасибо тебе, подумав решение и вправду пришло ко мне само: Код draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha);
draw_sprite(spr_healthbar, 0, x - 64, y - 72) draw_sprite_part(spr_healthbar, 1, 0, 0, sprite_get_width(spr_healthbar) * (enemy_hp / 100), sprite_get_height(spr_healthbar), x - 64, y - 72)
Красочная сюжетно-ориентированная игра-головоломка
|
|
| |
|