Данная статья поможет вам добавить в свою игру свою шкалу здоровья. Данный способ может пригодиться для отображения нескольких шкал в игре (жизни, манна, опыт). К тому же стандартный хеалсбар имеет несколько недостатков. 1-й пример.
Отображение стандартной горизонтальной полосы здоровья.
Нужно создать один объект, который будет отвечать за отображение.
Далее в событии CREATE добавить код:
Code
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.
Code
// жизней не может быть меньше минимального значения
if (heals > value_max) heals=value_max
// жизней не может быть больше максимального значения
if (heals < value_min) heals=value_min
Далее прорисовываем статичную рамку и фон полосы. Это будет постоянно отображаться на экране и будет видна, когда жизни не полные.
Code
// прорисовываем рамку
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 записываем значение жизней. Мы всю ширину полосы делим на максимальное значение жизней и умножаем на само количество жизней. Тем самым получим значение для отрисовки.
Code
// вычисляем длину жизней, чтоб перевести в шкалу
w = bar_wight / value_max * heals
А это сам процесс отрисовки самой важной части полоски. Устанавливаем цвет и рисуем прямоугольник в начале полоски и с длиной W.
Code
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 прописываем:
Code
// позиция нижней левой точки
bar_x = 1
bar_y = 160
// ширина и высота соответственно
bar_wight = 20
bar_hight = 100
// мин, макс, значение (жизни)
heals_min = 0
heals_max = 100
heals = 100
Как видите, изменилась точка положения полоски. Теперь также вписываем в событие рисования:
Code
// ограничение кол-ва жизней по мин и макс
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)
На этот раз делим не ширину, а высоту.
Code
w = bar_hight / heals_max * heals
И прописываем отображение полоски с немного другими параметрами.
Code
// жизни
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 пропишите что-то в этом стиле:
Code
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 прописываем:
Code
maxlife = 100 // максимальное значение
minlife = 0 // минимальное значение
life = 100 // стартовое значение жизней
В событии STEP сразу пропишем для просмотра:
Code
if keyboard_check(vk_down) then life -= 5
if keyboard_check(vk_up) then life += 5
Теперь в событии рисования вставляем код:
Как всегда сначала ограничиваем жизни по указанным параметрам.
Code
if life < minlife then life = minlife
if life > maxlife then life = maxlife
Далее рисуем сам спрайт.
Code
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***