Автор Иван Хотулев,
Детский технополис и учебный центр "Вектор Времени" г . Анапа http://vektor-vremeni.ru/
Программирование таймера, счётчика или спидометра в игровом движке Blender
Крепить текст к камере необходимо, если мы хотим двигаться вместе с объектом и наблюдать данные на экране (таймер, счётчик, спидометр и т.д.). Сделать это нужно уже на этапе создания персонажа, поскольку потом это может оказаться проблематично, из-за дополнительных деталей окружения.
Создадим текст и прикрепим его к камере. Перейдем на вид слева (или такой, какой вам удобно), чтобы видеть и текст и камеру:
Теперь выделим текст и (удерживая клавишу Shift) выделим камеру. Нажимаем Ctrl+лат. «Р». Появится окошко, с предложением создать связь потомок-родитель.
Теперь, куда бы мы не поворачивали камеру, текстовый объект будет двигаться вместе с ней. После нам понадобится изменить положение камеры, чтобы в ней нормально отображался персонаж.
Главное, предварительно отрегулировать расстояние от текста до камеры. Оно не должно быть слишком большим, иначе встречные посторонние предметы окружения могут заслонять текст и он будет невидим.
И так, общий вид с камеры теперь будет выглядеть так:
Добавим персонаж (кубик или любой другой объект), которым мы будем управлять с клавиатуры?
Размещаем камеру немного позади и выше объекта и разворачиваем её по направлению к персонажу (Transform Rotation см.выше):
Разбросаем несколько любых объектов по плоскости, чтобы было более понятно, где и как мы передвигаемся. Это будут своеобразные ориентиры:
Выделяем персонаж, переходим в игровую логику и настраиваем управление без программирования:
Напомним настройки поворота и движения (смена знаков при обратном движении):
Теперь, не выходя из игровой логики, привязываем камеру к персонажу. При этом она должна плавно за ним следить. Если мы её привяжем методом потомок - родитель (как текст к камере), то привязка будет жёсткой. Поэтому у BGE есть на этот случай специальный актуатор. И так, выделим камеру. Создадим сенсор Always и подключим к контролёру And. Теперь соединим контролёр с актуатором:
В поле Camera Object мы выбираем, за кем будем следить. В данном случае это наш персонаж. Строка Height назначает высоту расположения для камеры. Min и Max – минимальное и максимальное расстояние до объекта. Damping – задержка. В общем, вы можете сами настроить оптимальные для вас параметры. Готово. Жмём лат. «Р» и катаемся:
Как видим, текстовый объект всегда «перед глазами». Давайте сделаем таймер, который будет отсчитывать время. Напишем небольшой скрипт и познакомимся с ещё одним объектом управления логикой – переменной. Это я её так называю, а вы можете называть, как вам угодно. И находится этот «зверь» чуть левее сенсоров и контролёров:
В строке имени оставим без изменений. В строке ‘тип’ поставим Timer. Замечу, что переменная создаётся для каждого конкретного выделенного объекта. Для нас это текстовый объект. Но, когда мы выделяем текстовый объект, то появляется вот такая картинка. Нам нужны именно нижние свойства.
В окне для скриптов нажимаем New и пишем новый скрипт:
import bge
сцена = bge.logic.getCurrentScene()# получить текущую сцену
список = сцена.objects # получить список объектов
текст = список ["Текст"] # получаем текстовый объект
текст.size = 0.5 # меняем размер текста
текст.color = 0, 0.5, 0.5, 1 # меняем цвет текста
#text.text = "Wremya" # меняем сам текст но в таймере эта строка не нужна
таймер = текст [""] # назначаем переменную таймер
таймер = int(таймер) # переводим в целые числа
текст.text = str(таймер) # конвертируем цифры в строку
Выделяем текстовый объект. Создаём сенсор Always и в контролёре Python подключаем наш скрипт:
Запускаем движок и наблюдаем равномерную смену цифр:
Улучшим качество самих цифр. Допишем в скрипте пару строчек:
контр = bge.logic.getCurrentController()
объект = контр.owner
объект.resolution = 2
На слабых машинах игра может тормозить если выставить больше разрешение (resolution) больше 3
На этом урок закончен. Фактический, вы уже создали свою первую игру. Поздравляю