Четверг, 09.05.2024, 14:39
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Вход на сайт
Меню сайта
Категории раздела
Мои статьи [3]
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
проекты ***DeMoN***
Главная » Статьи » Мои статьи

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.1

март 2009

Скачать статью (DOCX)

Скачать пример-исходник (gm6)



Источник: http://demonproject.my1.ru/statii/Healthbars.docx
Категория: Мои статьи | Добавил: DeMoN (05.06.2009) | Автор: ***DeMoN*** E
Просмотров: 1250 | Комментарии: 2 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright Бирюков Дмитрий aka ***DeMoN*** © 2024