Как сделать отнятие жизней при определённой скорости
|
|
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 |
|
| |