Health bars
Прислано -MaX- на Декабрь 10 2008 07:03:05
Health bars.



Данная статья поможет вам добавить в свою игру свою шкалу здоровья. Данный способ может пригодиться для отображения нескольких шкал в игре (жизни, манна, опыт). К тому же стандартный хеалсбар имеет несколько недостатков.

1-й пример.

Отображение стандартной горизонтальной полосы здоровья.
Нужно создать один объект, который будет отвечать за отображение.
Далее в событии CREATE добавить код:
bar_x = 1 // положение по x (верхняя левая точка)
bar_y = 1 // положение по Y (верхняя левая точка)
bar_wight = 100 // ширина
bar_hight = 20 // высота
value_min = 0 // минимальное значение жизней
value_max = 100 // максимальное значение жизней
heals = 100 // начальное значение жизней

Здесь мы определили параметры полоски жизней. Параметры value_max и heals, скорее всего, будут изменяться в игре.

Далее само событие рисования (Draw event):

Сначала устанавливаем ограничения, что бы жизни не выходили за рамки min и max.
// жизней не может быть меньше минимального значения
if (heals > value_max) heals=value_max

// жизней не может быть больше максимального значения
if (heals < value_min) heals=value_min

Далее прорисовываем статичную рамку и фон полосы. Это будет постоянно отображаться на экране и будет видна, когда жизни не полные.
// прорисовываем рамку
draw_set_color(c_aqua)
draw_rectangle (bar_x, bar_y, bar_x + bar_wight, bar_y + bar_hight, true)
// прорисовываем фон
draw_set_color(c_dkgray)
draw_rectangle(bar_x + 1, bar_y + 1, bar_x + bar_wight-1, bar_y + bar_hight-1, false)

В переменную W записываем значение жизней. Мы всю ширину полосы делим на максимальное значение жизней и умножаем на само количество жизней. Тем самым получим значение для отрисовки.
// вычисляем длину жизней, чтоб перевести в шкалу
w = bar_wight / value_max * heals

А это сам процесс отрисовки самой важной части полоски. Устанавливаем цвет и рисуем прямоугольник в начале полоски и с длиной W.
draw_set_color(c_red) // цвет отображения шкалы жизней
// рисуем прямоугольник равный кол-ву жизней
draw_rectangle( bar_x, bar_y, bar_x+w, bar_y + bar_hight, false)

// тоже самое только прорисовываем рамку
draw_set_color(c_aqua)
draw_rectangle(bar_x, bar_y, bar_x+w, bar_y + bar_hight, true)


2-й пример.

Теперь нарисуем такую же полоску но она будет отображать значение жизней по вертикали. Также создаем объект и в событии CREATE прописываем:
// позиция нижней левой точки
bar_x = 1
bar_y = 160
// ширина и высота соответственно
bar_wight = 20
bar_hight = 100
// мин, макс, значение (жизни)
heals_min = 0
heals_max = 100
heals = 100


Как видите, изменилась точка положения полоски. Теперь также вписываем в событие рисования:
// ограничение кол-ва жизней по мин и макс
if (heals > heals_max) heals = heals_max
if (heals < heals_min) heals = heals_min

// рамка
draw_set_color(c_aqua)
draw_rectangle (bar_x, bar_y, bar_x + bar_wight, bar_y - bar_hight, true )
// фон
draw_set_color(c_dkgray)
draw_rectangle(bar_x+ 1, bar_y - 1, bar_x + bar_wight-1, bar_y - bar_hight+1, false)

На этот раз делим не ширину, а высоту.
w = bar_hight / heals_max * heals

И прописываем отображение полоски с немного другими параметрами.
// жизни
draw_set_color(c_red)
draw_rectangle( bar_x, bar_y - w, bar_x + bar_wight, bar_y, false )
// рамка
draw_set_color(c_aqua)
draw_rectangle( bar_x, bar_y - w , bar_x + bar_wight, bar_y, true )


Для просмотра эффекта в событии STEP пропишите что-то в этом стиле:
if life < minlife then life = minlife
if life > maxlife then life = maxlife

if keyboard_check (vk_down) then life -= 5

if keyboard_check (vk_up) then life += 5

В этом коде стоит заменить имена переменных на те, которые прописали вы.


3-й способ.

Этот способ позволяет отображать жизни в виде спрайта. Чем меньше жизней, тем меньшая часть картинки отображается. Эффект получается примерно как в Diablo II.

Для начала создадим спрайт, который будет показывать жизни. Для данного примера создаем с размером 80х80. Размер спрайта важен, так как он будет использоваться в коде. Далее создаем объект и в событии CREATE прописываем:
maxlife = 100 // максимальное значение
minlife = 0 // минимальное значение
life = 100 // стартовое значение жизней


В событии STEP сразу пропишем для просмотра:
if keyboard_check(vk_down) then life -= 5
if keyboard_check(vk_up) then life += 5


Теперь в событии рисования вставляем код:
Как всегда сначала ограничиваем жизни по указанным параметрам.

if life < minlife then life = minlife
if life > maxlife then life = maxlife

Далее рисуем сам спрайт.

draw_sprite_part (spr_sprite, 0, 0, 80, 80, - ((life/maxlife)*80), 30, 467);

/* спрайт(spr_sprite), подкартинка(0),лево(0),верх(80),
ширина(80),высота ( -(жизни/макс жизней)*высота картинки ),x, y) */

Чтоб лучше понять этот код попробуйте над ним поэкспериментировать.

----------------------------------------------------------------------------------------------------------------------------


Все указанные способы проверены и полностью функционируют. В архиве прилагается исходник.
Вы можете изменять этот файл и исходник по своему усмотрению. Единственная просьба сохранять имя автора.

----------------------------------------------------------------------------------------------------------------------------

Версия: 1.0




Автор: ***DeMoN***
E-mail: nosmokinginhell@mail.ru
ICQ: 477856666


Специально для сайта gmbest.w6.ru
Декабрь 2008 г



Эту статью + пример Вы можете скачать здесь.