Понедельник, 25 Ноября 2024, 16:28

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как сделать отнятие жизней при определённой скорости
vampir0305Дата: Понедельник, 31 Августа 2015, 09:23 | Сообщение # 1
Unity C# Programmer
Сейчас нет на сайте
Как сделать отнятие жизней при столкновении на определённой скорости с блоком.
И при этом проверять если от 100хп до 90хп и т.д, то спрайт изменить.
Пробовал так, в событие столкновения с блоком:
Код

if (vspeed > 0 && not place_free(x,y+vspeed))
{
        if speed>=8
        {
        obj_man.hp-=10
        move_contact(270);
        vspeed = 0;
        }
}


А в Step:
Код
if hp=100..91 {image_index=0}
        if hp=90..81 {image_index=1}
        if hp=80..71 {image_index=2}
        if hp=70..61 {image_index=3}
        if hp=60..51 {image_index=4}
        if hp=50..41 {image_index=5}
        if hp=40..31 {image_index=6}
        if hp=30..21 {image_index=7}
        if hp=20..11 {image_index=8}
        if hp=10..1 {image_index=9}


Но не работает, хоть и компилируется. (согласен, код полный кал, просто другого способа не придумал)
Подскажите кто знает!


Красочная сюжетно-ориентированная игра-головоломка

Сообщение отредактировал vampir0305 - Понедельник, 31 Августа 2015, 09:24
ЛеонидДата: Понедельник, 31 Августа 2015, 10:02 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Вторую часть можно записать формулой
Код
image_index=10-ceil(hp/10)


Добавлено (31 августа 2015, 10:02)
---------------------------------------------
Я проверил твой код на практике, всё работает. Что именно тебя не устраивает?


Сообщение отредактировал Леонид - Понедельник, 31 Августа 2015, 11:52
vampir0305Дата: Понедельник, 31 Августа 2015, 11:00 | Сообщение # 3
Unity C# Programmer
Сейчас нет на сайте
Леонид, мой код работает? лично у меня нет. У меня например при столкновении hp не отнимаются.

Добавлено (31 августа 2015, 10:58)
---------------------------------------------
То есть столкновение работает, объект останавливается, но вот хп не отнимаются.

Добавлено (31 августа 2015, 11:00)
---------------------------------------------
И ещё, у меня тут сделано, как бы платформер сначала бегаешь человечком, а потом можно сесть в самолёт и летать управление самолётом пока сделано вот так:

Код
if keyboard_check(ord('W')) {y-=10}
     if keyboard_check(ord('S')) {y+=5}
     if keyboard_check(ord('A')) {x-=10}
     if keyboard_check(ord('D')) {x+=10}


Столкновение с блоком работает, а хп не отнимает.


Красочная сюжетно-ориентированная игра-головоломка
SyankДата: Понедельник, 31 Августа 2015, 11:07 | Сообщение # 4
участник
Сейчас нет на сайте
Вместо бесконечных if лучше использовать switch
Хотя и выше подсказали более разумный вариант.
ЛеонидДата: Понедельник, 31 Августа 2015, 11:51 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
vampir0305, понял, в чем проблема.
Когда ты перемещаешь объект таким образом, его hspeed и vspeed (и сама speed) равны 0.
Вообще странно, зачем проверять скорость при столкновении относительно 8, если она всегда равна 10?
Если хочешь, чтобы твой код из первого поста работал, сделай так:
Код
if keyboard_check(ord('W')) {vspeed=-10}
if keyboard_check(ord('S')) {vspeed=5}    


Сообщение отредактировал Леонид - Понедельник, 31 Августа 2015, 11:52
vampir0305Дата: Понедельник, 31 Августа 2015, 12:54 | Сообщение # 6
Unity C# Programmer
Сейчас нет на сайте
Леонид, Да это работает, только если столкнуться с блоком когда изменяется vspeed, то есть если чисто напрямую лететь горизонтально, то ничего не получится.

Добавлено (31 августа 2015, 12:48)
---------------------------------------------
ой нет, всё я разобрался, надо ещё использовать hspeed

Добавлено (31 августа 2015, 12:54)
---------------------------------------------
У меня теперь другой вопрос. Как сделать плавный набор скорости?


Красочная сюжетно-ориентированная игра-головоломка
ЛеонидДата: Понедельник, 31 Августа 2015, 14:21 | Сообщение # 7
постоянный участник
Сейчас нет на сайте
Создай alarm, в нем периодически увеличивай hspeed\vspeed (в зависимости от того, что тебе нужно) и сделай лимит скорости.
При нажатии на кнопку ускорения:
Код
alarm[0]=*сколько-нибудь шагов*

В alarm'е:
Код
vspeed=min(*максимальная скорость*,*скорость* + *ускорение*)
alarm[0]=*сколько-нибудь шагов*

Это при движении вниз, при движении вверх ускорение нужно будет отнимать и находить наибольшее значение (с помощью max(a,b)).


Сообщение отредактировал Леонид - Понедельник, 31 Августа 2015, 14:22
  • Страница 1 из 1
  • 1
Поиск:

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