Страницы

четверг, 27 января 2011 г.

Отображение игровых переменных

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

Одной из интересных игровых идей является изменением величины не сразу такая как она есть, а постепенно. Ну например, допустим у вас 75 жизней из 100. Вам наносит урон враг в 25 единиц. И мы не сразу отображаем 50 жизней, а постепенно убавляем 75 до 50. Это может быть как обычная цифра, так и какая-то полоска, где полоска от 50 до 75 жизней отображается красным, т.о. показываем что жизни отбавляются. Пьём лечащую бутылку, показываем зелёный отрезок от 50 до  100.

При этом игрок знает в какую стороны изменилось значение. Если это деньги, то он видит как изменилось значение, а вот если отобразить значение сразу, то сложно понять отбавилось или прибавилось. Либо игроку надо будет вычесть предыдущее значение от текущего чтобы узнать разницу, а ведь вы не хотите загружать не интересной и не нужной работой?

Сама идея проста. Выбираем то значение, которое должно быть "мягким".
1) Создаем под нее 2 переменные: реальное, текущее значение (real_value) и отображаемое (draw_value). Вместо var поставьте своё название.
2) Теперь необходимо придумать функцию "перемещения". Сначала, по русски: Если разница между отображаемой величиной и реальной больше, то отображаемая величина стремится к реальной, а иначе делаем их одинаковыми, если они ещё не таковые. Как стремится? Вы можете выбрать по своему разумению. Я вам предложу 1 вариант сейчас и несколько позже. А сейчас код:
if(abs(real_value - draw_value) > 0.009)
draw_value += (real_value - draw_value) / 8;
else
if(value != draw_value)
draw_value = value;
Всё. Теперь осталось рисовать переменную draw_value вместо real_value. Или можете попробовать их вместе, чтобы узнать разницу.

Функция "перемещения" - (real_value - draw_value) / 8; Перемещается гладко.
Можно линейную функцию для небольших величин - sign(real_value - draw_value);

Также вы можете применять разные спец. эффекты. Допустим как вращающийся счётчик, для денег или ещё чего-нибудь. Цветные полоски, как я описал выше. Придумайте своё.

Сам пример (в формате GM8, 10кб). Отображает координату мышки по Y.

2 комментария:

  1. Судя по количеству скачавших исходник, посещаемость блога... низкая :)
    Привет Ангел, рад что ты вернулся к написанию статей :).

    ОтветитьУдалить
  2. Weslom Po, эт да... Пишу в архив, в там посмотрим! ;) Ang3L

    ОтветитьУдалить