Всё для Game Maker
Навигация
Главная
Game Maker
Игры
Примеры
Статьи
Программы
Ресурсы
Справочники
Пакеты расширений
Поиск
Форум
Ссылки
Загрузить файл
Сейчас на сайте
Гостей: 1
На сайте нет зарегистрированных пользователей

Пользователей: 136
Посетитель: Valantery
Темы форума
Новые темы
Alpha-версия School ...
School of the Darkne...
Ассоциации
усовершенствование с...
RPG
Обсуждаемые темы
Ассоциации [286]
Black Monday [52]
RPG [50]
есть вопрос [50]
О форуме [45]
Топ закачек
Woin [5153]
Interest [4417]
Tank [3523]
Спрайты для 2d боевиков [3489]
Спрайты. Часть 1 [3479]
Спрайты. Часть 3 [3468]
Char [3381]
Space [3246]
Pirates [3155]
Спрайты. Часть 2 [3128]
Счетчики

Рейтинг сайтов о создании игр
Реклама
Статья
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 г



Эту статью + пример Вы можете скачать здесь.
 
Опубликовал -MaX- Декабрь 10 2008 07:03:05 · 0 Комментариев · 7706 Прочтений · Для печати
Комментарии
Нет комментариев.
Добавить комментарий
Вам нужно авторизоваться или зарегистрироваться чтобы оставлять комментарии.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, авторизируйтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Голосование
Оцените новую версию сайта :)

5 (отлично)

4 (хорошо)

3 (плохо)

2 (ужасно)

Для участия в опросах вы должны авторизоваться или зарегистрироваться.
Мини-чат
Вам необходимо авторизоваться.

GRID
06/04/2012 18:17
<_<

MaxIM
21/01/2012 16:23
Я всё еще вспоминаю про этот сайт... Жалко что -МаХ- ушёл в неизвестность,и забил на всё =(

CrashBand
17/10/2011 20:40
лол.

MaxIM
04/08/2011 22:26
Я тоже жив,а вот насчет -MaX-`a незнаю =(((

fedenkovadik
28/07/2011 03:41
прошел практически ровно год, немного больше. Я все еще жив. В отличии от сайта. сука.

Архив чата