Главная › Форумы › 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 по строчкам.