Четверг, 21 Ноября 2024, 21:33

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблемы с 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, покадрово, и менять номер кадра. smile




Сообщение отредактировал 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
  • Страница 1 из 1
  • 1
Поиск:

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