Статистика |
Онлайн всего: 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 |
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
|
|