Форум » Вопрос-Ответ » Спрайт-3 » Ответить

Спрайт-3

Volotar: Прошу помощи. Вчера весь вечер (более 4 часов) просидел за компом и немог решить задачу. У меня: 1 спрайт - врага, 2 спрайт - врага когда по нему ударили. 3 спрайт - враг умер 4 спрайт - героя идет 5 спрайт - герой бьет (лапой) Хотел реализовать: герой бьет, враг 1 заменяется на 2, потом назад на 1 при этом у него -1 жизнь. При lives=0 заменяю на 3. Логично. :) Остановился: 1) жизнь врага -1, но нет смены на спрайт 2, сразу 3 (визуально не видно, попал ты во врага или нет) 2) враг умирает при первом ударе Проблема: 1) враг меняется с 1 на 2 , жизнь -1, но при смене снова на 1, жизнь восстанавливается (безсертный враг). 2) Герой 4 должен иметь событие при столкновении с врагом на своем кадре= 5 (анимированый спрайт состоящий из 8 кадров), поскольку любое соприкосновение с врагом происходит событие см. 1) Испробованые решение: 1 - использование глобальной переменной жизнь_монстра (результат =0). 2 - Событие столкновение врага с объектом герой => все враги умирают. :( Жду советов, спасибо!

Ответов - 4

Ev-genius: вероятнее всего нет флага того что здоровье уже было урезано в течении этого удара и больше их урезать не надо. про какой флаг я говорю можно посмотреть в предыдущей теме про таблички и подсказки. там где создается переменная со значениями true-false, с описанием зачем эта переменная нужна.

Volotar: Буду пробывать, спасибо!

Ev-genius: Пробуйте ставить эксперименты. берете новый проект и воссоздаете там кусочек проблемного кода. избавляетесь от всего лишнего в коде и повторяете эксперимент с ошибкой, далее разбиваете код какими-нить алертами если дебажить пока не умеете. посреди кода где отнимается здоровье вставляете шоу_месадж, где выводите здоровье. повторяете эксперимент. и по кусочкам находите ошибку. в вашем примере у вас при столкновении вероятнее всего шоу_мессадж будет выводиться один за другим, если так то значи ваш код повторяется много раз, придумайте где поставить переключатель который сработав один раз больше не дас запустить этот же код в следующую миллисекунду.


Volotar: Вот мое решение. 1) Объект "враг" - Events -Collision (столкновение с героем) - Action пишу код: if герой.image_index=5 // номер кадра героя на который нужно реагировать { sprite_index=s_враг_удареный; image_speed=0.5; } 2) Объект "враг" - Events - Step пишу код: // проверяю по завершении анимации s_ враг_удареный меняю назад спрайт (поскольку анимация состоит из 4 кадров) if (sprite_index=s_ враг_удареный and image_index=3) { sprite_index=s_враг; monstr_lives-=1; image_speed=0.2; } Спасибо за поддержку и "наведение на локику". :)



полная версия страницы