Проблемы с healthbar'ом
| |
realyhead | Дата: Воскресенье, 20 Мая 2012, 22:24 | Сообщение # 1 |
участник
Сейчас нет на сайте
| Нарисовал healthbar и разбил его на 5 частей: - когда жизни равны 0
- когда жизни равны 25
- когда жизни равны 50
- жизни равны 75
- жизни равны 100
и что бы проверить работоспособность healtbar'a сделал, что при нажатии левой клавиши мыши от переменной healt отнималось 5, и отталкиваясь от этот скрипт будет менять спрайты, вот код рисования: Code if healt>=100{ draw_sprite(hp100,3,x,y) }
if healt=75{ draw_sprite(hp75,3,x,y) }
if healt=50{ draw_sprite(hp50,3,x,y) }
if healt=25{ draw_sprite(hp25,3,x,y) }
if healt<=0{ draw_sprite(hp0,3,x,y) show_message('Зе енд') }
запустил- нажал левую клавишу мыши и спрайт сразу исчез, но после нескольких нажатий появился но уже спрайт 75hp потом 50hp и тд. В чём проблема?
поиграть в мою онлайн игру
Сообщение отредактировал realyhead - Воскресенье, 20 Мая 2012, 22:24 |
|
| |
Andrey_M | Дата: Воскресенье, 20 Мая 2012, 22:34 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| "Здоровье" переводится health. У тебя нажатия отнимают здоровье, по идее?
ЪЪЪЪ! Лучшая благодарность - плюс в репутацию :-)
|
|
| |
realyhead | Дата: Воскресенье, 20 Мая 2012, 22:35 | Сообщение # 3 |
участник
Сейчас нет на сайте
| дело не в названии переменной а в проблеме со спрайтами. Каждое нажатие отнимает по 5 от этой переменной
поиграть в мою онлайн игру
|
|
| |
FadeBaker | Дата: Воскресенье, 20 Мая 2012, 22:37 | Сообщение # 4 |
JavaSE Game Developer
Сейчас нет на сайте
| realyhead, ты в коде нигде не написал, что если, например, здоровье == 95, то рисовать хеалтбар. При первом уменьшении здоровья оно равно 95. Подумай.
Уроки по GM Minecraft 2D на GM — Мои проекты — Blood Harvest [2D] — Original Blood Harvest [2D]: Remastered Edition Adventure Craft [2D] — Sandbox Space Shock [2D] — Scroll Shooter Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
|
|
| |
realyhead | Дата: Воскресенье, 20 Мая 2012, 22:39 | Сообщение # 5 |
участник
Сейчас нет на сайте
| Fade ошибку свою понял, я прописал рисовать спрайт если healt равен 100,75,50,25,0 а для остальных значений не прописал, но как "урезать" код что бы не писать каждые -5 значений? может через for?
поиграть в мою онлайн игру
|
|
| |
Xageu | Дата: Воскресенье, 20 Мая 2012, 22:53 | Сообщение # 6 |
Хадей - Друг Детей
Сейчас нет на сайте
| switch healt { case 0: draw_sprite case 25: draw_sprite case 50: draw_sprite case 75: draw_sprite case 100: draw_sprite }
|
|
| |
realyhead | Дата: Понедельник, 21 Мая 2012, 08:13 | Сообщение # 7 |
участник
Сейчас нет на сайте
| ^ тоже самое
поиграть в мою онлайн игру
|
|
| |
Xageu | Дата: Понедельник, 21 Мая 2012, 08:32 | Сообщение # 8 |
Хадей - Друг Детей
Сейчас нет на сайте
| У тебя стандартный хелс бар, легче сделать через draw. Если же нет, рисуй каждый кадр. Если же тебе нужны только эти бары, добавь граничные условия: меньше или равен сотне, но больше семидесяти пяти и т.д.
|
|
| |
LunarPixel | Дата: Понедельник, 21 Мая 2012, 08:35 | Сообщение # 9 |
старожил
Сейчас нет на сайте
| Code switch healt { case 0: sprite_index=sprite1; break; case 25: sprite_index=sprite2; break; case 50: sprite_index=sprite3; break; case 75: sprite_index=sprite4; break; case 100: sprite_index=sprite5; break; }
draw_sprite(sprite_index,0,x,y)
Можно sprite_index заменить на переменную, если не нужно менять спрайт объекта.
Ну а вообще, проще загнать все эти спрайты в 1, покадрово, и менять номер кадра.
Сообщение отредактировал LunarPixel - Понедельник, 21 Мая 2012, 08:39 |
|
| |
Qvant | Дата: Понедельник, 21 Мая 2012, 09:10 | Сообщение # 10 |
почти ветеран
Сейчас нет на сайте
| Если максимальное здоровье 100 и нужно менять хелсбар через 20 единиц то используй целоцисленое деление div
Code switch (healt div 20) { case 0: draw_sprite ... break;
case 1: draw_sprite ... break;
case 2: draw_sprite ... break;
case 3: draw_sprite ... break;
case 4: draw_sprite ... break; }
если хелс бар один спрайт , состоящий из кадров то ещё проще Code image_index=healt div 25;
Сообщение отредактировал Qvant - Понедельник, 21 Мая 2012, 09:35 |
|
| |
LunarPixel | Дата: Понедельник, 21 Мая 2012, 09:23 | Сообщение # 11 |
старожил
Сейчас нет на сайте
| Qvant, только вот по первому посту непонятно, в какой момент должны меняться спрайты. У меня они меняются, как написано в первом посте, только когда = конкретному значению. У тебя же начнут меняться в промежуточных значениях, что более логично )
Ну и конечно, однозначно, проще сделать одним спрайтом.
Сообщение отредактировал LunarPixel - Понедельник, 21 Мая 2012, 09:34 |
|
| |
Qvant | Дата: Понедельник, 21 Мая 2012, 09:34 | Сообщение # 12 |
почти ветеран
Сейчас нет на сайте
| LunarPixel, да , по 1 посту не понятно , но по этому посту : Quote Fade ошибку свою понял, я прописал рисовать спрайт если healt равен 100,75,50,25,0 а для остальных значений не прописал, но как "урезать" код что бы не писать каждые -5 значений? может через for? я думаю что автору нужно , чтоб его полоска здоровья менялась "скачками" а не плавно (если нужно чтоб Hp менялась не через 20 единиц , а через 5 - тогда делим div на 5 )
PS. Если надо , чтоб Hp рисовалось плавно , то конечно надо по другому.
Сообщение отредактировал Qvant - Понедельник, 21 Мая 2012, 09:36 |
|
| |
LunarPixel | Дата: Понедельник, 21 Мая 2012, 09:45 | Сообщение # 13 |
старожил
Сейчас нет на сайте
| Qvant, да нет, я не о том. У тебя все правильно, должно меняться скачками. Просто у тебя, если жизней станет 99, то спрайт уже изменится. А у меня он изменится только если жизней станет 75. Просто я посмотрел, что автор везде использует только равенство, потому сделал так.
Если брать вариант Qvant, то можно ещё сделать вот так:
Code switch round(healt/25) { case 0: draw_sprite(sprite0,0,x,y); break; case 1: draw_sprite(sprite1,0,x,y); break; case 2: draw_sprite(sprite2,0,x,y); break; case 3: draw_sprite(sprite3,0,x,y); break; case 4: draw_sprite(sprite4,0,x,y); break; }
Чтобы жизни менялись более гармонично. А то получается, что при значении 99, спрайт сразу заменится на тот, который обозначает 75 жизней.
Сообщение отредактировал LunarPixel - Понедельник, 21 Мая 2012, 09:53 |
|
| |
realyhead | Дата: Понедельник, 21 Мая 2012, 10:02 | Сообщение # 14 |
участник
Сейчас нет на сайте
| LunarPixel, спасибо как раз то, что я и хотел, можешь поподробнее описать строку Code switch round(healt/25)
поиграть в мою онлайн игру
|
|
| |
LunarPixel | Дата: Понедельник, 21 Мая 2012, 10:06 | Сообщение # 15 |
старожил
Сейчас нет на сайте
| Делим переменную на 25 и округляем полученное значение до наибольшего целого (round). Ну а дальше смотрим, что получилось после округления: 0,1,2,3 или 4
Сообщение отредактировал LunarPixel - Понедельник, 21 Мая 2012, 10:06 |
|
| |
|