Pull to refresh

Blender 2.49b + Python 2.6 – используем клавиатуру в своей игре

Python *
Sandbox
Blender – свободно распространяемая программа с открытым исходным кодом для создания трехмерной графики и компьютерных игр, которая поддерживает Python в качестве «встроенного» языка программирования.

Python – интерпретируемый язык программирования.

Данный топик пытается укрепить иллюзию, что, обладая минимальными познаниями в Блендере и Питоне, каждый сможет создать свою игру. Из всего, что можно сделать с помощью Питона в Блендере, для начала рассматривается простейшее взаимодействие с клавиатурой. Так же в топике пошагово в скриншотах описаны минимально необходимые методы работы с Блендером: запуск, сохранение сцены, манипуляции с объектом, добавление сенсоров и контроллеров и т. д.


Лирическое вступление


— Этот топик — простое вступление в тему программирования на Python в Блендере. Он будет не интересен людям, хорошо знакомым с темой. Скриншотов интерфейса Блендера в разы больше, чем строк кода… но это только вступление, которое предназначено ознакомить на начальном уровне с интерфейсом Блендера и показать, как в Блендере работает Питон и как в Блендере работать с Питоном… Зато начинающие пользователи, честно проделав шаги, описанные в топике, будут знать, что их ждет впереди, если они выберут Блендер (плюс Питон) как основную программу для разработки собственной игры…

— В топике описывается работа с Blender версии 2.49b (как одной из самых стабильных и проверенных версий) и Python версии 2.6 (просто потому что эта версия уже идет в «комплекте» с Блендером и все нужные и важные модули уже в себе содержит — программировать можно начать сразу же после установки самого Блендера).
Blender 2.49b для всех поддерживаемых платформ можно скачать по этой ссылке —
http://download.blender.org/release/Blender2.49b/ (для Windows это http://download.blender.org/release/Blender2.49b/blender-2.49b-windows.exe).
Как уже было сказано, отдельно качать и устанавливать Python не обязательно (даже если после установки вы увидели в консоли «No installed Python found» и вас отправили докачивать питон, все равно, в папке с установленным Блендером вы уже можете найти файл python26.zip и посмотреть в нем, какие модули есть).

— Сразу ссылка на готовый файл проекта, созданного в этом топике: http://ifolder.ru/26830265

— Картинки залиты habrastorage.org. А так же на Радикал, потому что habrastorage.org уменьшает размеры скриншотов, от чего один-два из них делаются бесполезными.

Вперед


Итак, перед нами задача — использовав программирование на Питоне, создать элементарное взаимодействие с клавиатурой для нашей будущей игры в Блендере.

Для начала надо минимально понять как устроен механизм Game Logic в Блендере. Он состоит из трех элементов: сенсоры, контроллеры, актуаторы.
Сенсор — это «раздражители», события, ситуации: нажатие клавиши, движение мышью, столкновение объектов, приближение объекта к другому объекту и так далее.
Контроллер — это то, что решает какой актуатор будет запущен в ответ на сработавший сенсор и будет ли вообще запущен какой-либо актуатор.
Актуатор — это «действие», которое будет выполнено при срабатывании сенсора: придать скорость игровому персонажу, сделать объект невидимым, запустить анимацию, выйти из игры и так далее.

Естественно, из всех сенсоров нас сейчас интересует сенсор клавиатуры (нажатие клавиш). С ним мы и будем работать.

Наш хитрый план таков:
1) создаем сцену с объектом, которым можно управлять
2) добавляем сенсор клавиатуры (нажатие клавиш)
3) добавляем в проект свой скрипт обработки нажатия клавиш
4) добавляем в проект контроллер
5) «вешаем» на сенсор клавиатуры наш скрипт

Поехали!


1) Запустите Блендер (ссылка на скачивание указана в начале топика). Вы сразу попадете в сцену «по умолчанию», в которой уже будут объекты по умолчанию. Она то нам и сгодится, причем такая, какая есть. Сохраните проект, чтобы можно было работать с ним дальше: File->Save (укажите название файла и место хранения).

2) Выделите объект в центре сцены, кликнув по нему правой кнопкой мыши.
Нажмите F4, чтобы вызвать панель Game Logic.
( копия картинки на habrastorage.orgсильно уменьшена, лучше смотреть на радикале)


Смените тип объекта с «Static» на «Dynamic».
( копия картинки на habrastorage.org )


Чтобы добавить сенсор клавиатуры, в панели Game Logic в поле «Sensors» нажмите кнопку «Add», затем из всех типов сенсоров выберите тип «Keyboard», переименуйте сенсор с «sensor» на «keyboard» и нажмите кнопку «All keys», чтобы сенсор срабатывал при нажатии любой клавиши. Также обязательно нажмите кнопку «Pulse Mode»
( копия картинки на habrastorage.orgсильно уменьшена, лучше смотреть на радикале)


3) Чтобы добавить свой скрипт обработки клавиш в проект, выберите панель «Text Editor»
( копия картинки на habrastorage.org )


В панели выберите файл пом именем «Text»
( копия картинки на habrastorage.org )


и переименуйте его в «key_observer.py» и для удобства чтения нажмите кнопки подсветки синтаксиса и нумерования строк.
( копия картинки на habrastorage.org )


Вставьте следующий код в окно:
сразу ссылка на pastebin.com — http://pastebin.com/HBJf4X9K
		#импортируем нужные модули
		import GameLogic, GameKeys
		#ставим гравитацию на ноль, чтобы объект не <i>выпадал</i> с поля зрения камеры
		GameLogic.setGravity([0, 0, 0])

		#получаем текущий контроллер
		controller = GameLogic.getCurrentController()
		#получаем сенсор клавиатуры
		keyboard = controller.sensors['keyboard']
		#получаем объект, к которому привязан котроллер
		player = controller.owner

		#для каждой кнопки, чье состояние изменилось, проверяем, является ли она управляющей
		#player.applyForce([X, Y, 0], 1) - применяем силу к объекту, чтобы придать ему скорость
		for key in keyboard.events:
		    keyString = GameKeys.EventToString(key[0])
		    Y = X = 0
		    if keyString == 'WKEY':
		        Y = 5
		    elif keyString == 'SKEY':
		        Y = -5
		    if keyString == 'DKEY':
		        X = 5
		    elif keyString == 'AKEY':
		        X = -5
		    player.applyForce([X, Y, 0], 1)


4) Вернитесь в панель Game Logic, выбрав «Button Window»
( копия картинки на habrastorage.org )


Чтобы добавить контроллер, в поле «Controllers» нажмите «Add», затем из всех типов контроллеров выберите тип «Python», в поле «Script» введите имя созданного в предыдущем шаге скрипта «key_observer.py» и переименуйте контроллер из «cont» в «key_observer».
( копия картинки на habrastorage.orgсильно уменьшена, лучше смотреть на радикале)


5) Чтобы «повесить» наш скрипт на сенсор клавиатуры, нужно протянуть «ниточку» между сенсором «keyboard» и контроллером «key_observer».
( копия картинки на habrastorage.org )


Всё!
В итоге у вас должна получиться следующая картина (ссылка на файл законченного проекта): http://ifolder.ru/26830265

Теперь нажмите на клавиатуре «P» для того, чтобы запустить игру и сразу же попробуйте управлять объектом, используя кнопки «W», «S», «A», «D».

Все порядке, объект движется!

Итог


Это был пример минимального взаимодействия с клавиаторой через Python на Блендере. По-хорошему, система взаимодействия с устройствами ввода должна уметь гораздо больше: назначать действия на клавиши, назначать два разных действия на одну клавишу, переназначать клавиши по усмотрению игрока, обрабатывать любые манипуляции с устройством ввода — и все эти задачи можно успешно решить, используя Python в Блендере. Об этом — в одном из следующих топиков. (Следующий топик можно найти по этой ссылке)
Tags:
Hubs:
Total votes 39: ↑37 and ↓2 +35
Views 5.3K
Comments Comments 12