Ответ в теме: Курс по BGE от drdotmom

Главная Форумы Blender Game Engine (BGE) Курс по BGE от drdotmom Ответ в теме: Курс по BGE от drdotmom

#13099
Disaster
Участник

Глава 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 по строчкам.


О сайте

На данном сайте Вы сможете найти множество уроков и материалов по графическому
редактору Blender.

Контакты

Для связи с администрацией сайта Вы можете воспользоваться следующими контактами:

Email:
info@blender3d.com.ua

Следите за нами

Подписывайтесь на наши страницы в социальных сетях.

На сайте Blender3D собрано огромное количество уроков по программе трехмерного моделирования Blender. Обучающие материалы представлены как в формате видеоуроков, так и в текстовом виде. Здесь затронуты все аспекты, связанные с Blender, начиная от моделирования и заканчивая созданием игр с применением языка программирования Python.

Помимо уроков по Blender, Вы сможете найти готовые 3D-модели, материалы и архивы высококачественных текстур. Сайт регулярно пополняется новым контентом и следит за развитием Blender.