Главная › Форумы › Blender Game Engine (BGE) › Курс по BGE от drdotmom › Ответ в теме: Курс по BGE от drdotmom
Глава 2. Логика.
Очень много букв!
Код – это сценарий, читая который программа получает необходимые инструкции.
Хотя если точнее – это чистая логика, описанная понятным языком для компьютера. Игровой движок это некоторе объединение звукового, физического и графического движков. Смысл в том, что игровой движок не только объединят все эти движки предоставляя к ним удобный доступ на одном языке, но и ускоряет процесс написания игрушки за счёт объединения нескольких часто используемых функций в одну.
Как обьяснить компьютеру, чего ты от него хочешь или “вход, обработка, выход”.
Плиточки Blender Game Engine (они же ноды).
По-умалчанию блендер делит эти ноды на сенсоры, контроллеры и актуаторы.
Сенсоры это входящяя информация. Она может быть любой – запуск игры, переменная, клавиша клавиатуры.
Контроллеры – определяют, как читать эти сенсоры для взаимодействия с актуаторами. Так, например, имея переменную равную 100 мы можем запустить актуатор тогда, когда переменная станет меньше или больше 100.
Актуаторы – определяют действие, которое случится после того, как контроллер обработает сенсор и даст “добро” на выполнение при соблюдении условий.
Эти базовые ячейки заменяют стандартную конструкцию проверки:
“Если условие выполнено, то происходит действие”
Их минусом явлеятся узкий функционал как в количестве актуаторов, так и в их качестве.
Так, например, имея актуатор “Sound” – мы можем настроить для звука параметр “pitch” и “volume” перед запуском игры. Но как быть, если эти параметры нам нужно будет менять в процессе игры для, например, звука двигателя?
Тут уже необходимо использовать скрипт на bge phyton или, по-разговорному – код.
Весь код упирается в написание инструкции из предоставленных движком функций.
Игровой движок – как конструктор. Он содержит необходимые блоки, которых, скорее всего, будет достаточно для ваших целей.
Из этих блоков вы и конструируете игру вместо того, что бы забивать информацию о том, на какую ногу процессора подть ток, а с какого убрать и когда.
Первая мысль, которая проскакивает в голове человека, решившего написать свой первый код – “как мне написать то, что мне нужно на выбранном мной языке?”
Синтаксис.
Что такое синтаксис?
Синтаксис – это правила, которые регулируют написание кода. Как мы руководствуемся правилами при написании писем в реальном мире – так и в компьютерном должны следовать правилам. Причём если человек поймёт “превед медвед” – компьютер решит, что вы больны.
Операции.
Операции это действия, которые мы можем выполнить над функциями и переменными.
Так, например, складывая скорость с положением в пространстве – мы получим в лобешник за эту дичь воспользуемся арифметическим оператором “+”
Арифметические операторы:
1. “+” – сложение
2. “-” – вычитание
3. “*” – умножение
4. “/” – деление
5. “%” – возвращает только остаток от деления (например при делении 11 на 4 – вернёт остаток – 3)
6. “//” – цельночисленное деление(например при делении 11 на 4 – вернёт 2)
7. “**” – возведение в степень.
Операторы сравнения:
1. “==” – сравнение. Выражение 5==5 вернёт “true”.
2. “!=” – не равно. Выражение 5!=5 вернёт “false”.
3. “<” и “>” – меньше или равно \ больше или равно.
4. “<=” и “>=” – меньше или равно \ больше или равно.
Операторы присваивания:
1. “=” – присваивает значение правого операнда левому. (например x=5)
2. “+=” / “-=” / “*=” и т.д. – присваивание с арифметической операцией. Так, например, выражение x+=y вернёт резултат сложения и присвоит его переменной “x”
Логические операторы:
1. “if” – “если”. (если x=y – выполняется действие)
2. “else” / “or” – “Иначе” / “или” (Если x = y – выполняется действие 1, иначе – действие 2)
Разберём небольшой кусочек кода bge:
import bge
player = bge.logic.getCurrentController()
step = player.sensors ["KeyboardW"]
sound = player.actuators ["Step_Sound"]
if step.positive:
player.activate(sound)
else:
player.deactivate(sound)
Указываем player как локальное имя(т.е. только для этого скрипта)для текущего контроллера (объекта, на котором запускается скрипт)
Указываем step как локальное имя для сенсора с именем “KeyboardW”
Указываем sound как локальное имя актуатора “Step_Sound”
Если сенсор был активирован:
то запускается актуатор “Step_Sound”
Иначе:
отключается актуатор “Step_Sound”
Таким образом в игре мы будем включать звук только когда персонаж двигается.
Что касается логического оператора.
Если вы задаёте вопрос – должен быть ответ. Ответов может быть несколько и все они должны содержаться строчкой ниже и с отступом в одну табуляцию относитьно логического оператора.
#
if x=y:
функция;
if t!=s:
функция;
функция;
функция;
#
if g<=4:
высунуть язык;
if g<0:
присесть;
моргнуть;
else:
съесть бревно;
else:
пролить чай;
#
Если g меньше 4х, то персонаж высовывает язык. Если при этом g<0 – то персонаж высунув язык приседает и моргает. Если g меньше 4, но больше 0 – персоаж высунув язык съедает бревно. Если g больше 4х – персонаж проливает чай.
Теперь о самом важном – о применении.
import bge // Открывает библиотеку функций игрового движка
cont = bge.logic.getCurrentController //текущий контроллер
own = cont.owner //переменные текущего контроллера
sound = cont.actuators ["Sound_onlow"] //актуатор текущего контроллера с именем "Sound_onlow"
gear = own['gear'] //переменная текущего контроллера с именем "gear"
sound.pitch = (own["rpm"]*0.01)+ (gear / 50) // для актуатора "Sound_onlow" параметр pitch будет равен переменной "rpm" умноженной на 0.01 плюс результат деления переменной gear на 50.
cont.activate(sound) // для текущего контроллера выполняется актуатор ["Sound_onlow"] cо значением pitch, зависящим от оборотов и передачи.
Переменная оборотов и переменная текущей передачи регулирует уровень pitch для звука двигателя по формуле (rpm*0.01)+(gear/50). Формула для правильного звучания двигателя определялась опытным путём.
При присвоении вы можете использовать любые имена для читабельности кода. Так, например, вы можете bge.logic.getExitKey()(узнать клавишу выхода) присвоить переменной с именем edgjluvbhe, но зачем?
Ссылка на Blender Phyton References, в котором вы найдёте все функции bge phyton с описанием, дополнительной информацией и примерами.
В целом синтаксис приходит с опытом и потому нужно активнее читать скрипты на bge phyton и других яп. Искать общую логику, характерные особенности. То, что я вам сейчас описал – не позволит вам прямо сейчас начать писать GTA6, но поможет изучить bge phyton или, как минимум – начать его читать.
Надеюсь, был полезен.
В следующей главе планирую разобрать физику машинки из Rally Cross по строчкам.