Перейти к содержанию

Python в игростроении/Blender/GameLogic

Материал из Викиучебника — открытых книг для открытого мира

Здесь будут представлены примеры контроля LogicBricks с помощью написанных на Питоне скриптов

Основано на документации с оффициального сайта разработчиков [1]

Введение

[править]

Blender3d GameEngine построен на принципе использования Logic Bricks. Logic Bricks представлены сенсорами, контроллерами,активаторами.

К любому объекту могут быть привязаны эти "логические блоки". После назначения объекту логических элементов, с ним можно взаимодействовать.

Связь сенсоров с активаторами происходит через контроллер. В качестве контроллера может быть скрипт на Питоне.

Данный учебник посвящен именно этому типу контроллера.

Сенсоры/Sensors

[править]

Сенсоры - 1ый LogicBrick

Существует несколько видов сенсоров. Для создания сенсора нужно:

  • Выделить объект в 3D окне (с которым связывается сенсор).
  • создать logicbrick для этого сенсора,выбрать его тип (клавиатура,мышь,радар..), дать ему оригинальное имя.
  • Открыть текстовый раздел редактора,там создать(или использовать уже имеющийся) файл-название файла это имя будущего контроллера(скрипта) на Питоне.
  • Создать logicbrick контроллера.Тип контроллера-Python. имя-имя файла(см выше).
  • Теперь описываем контроллер в скрипте
import GameLogic #подключает модуль GameLogic
  • Могут быть добавлены другие модули движка, например Rasterizer или GameKeys.
  • А также любые доступные модули Питона.
co=GameLogic.getCurrentController()#привязывание скрипта к контроллеру с именем "co"
sensor_name=co.getSensor('sensor_name')#привязывание к контроллеру сенсора с именем "sensor_name"


Keyboard_sensor

[править]

http://www.blender3d.org/documentation/pydoc_gameengine/PyDoc-Gameengine-2.34/SCA_KeyboardSensor.SCA_KeyboardSensor-class.html

Класс: SCA_KeyboardSensor
Описание: Класс сенсора Keyboard.
import GameLogic
import GameKeys

co = GameLogic.getCurrentController() #Привязываем скрипт к контроллеру "со"
klavishi = co.getSensor('klavishi') #Привязываем сенсор "klavishi" к контроллеру "со" 

 # status: these should be added to a module somewhere
 #Переменные для модуля GameKeys

KX_NO_INPUTSTATUS = 0
KX_JUSTACTIVATED = 1
KX_ACTIVE = 2
KX_JUSTRELEASED = 3

 #Получаем список  нажатых клавиш
keylist = klavishi.getPressedKeys()
for key in keylist:

 # key[0] == GameKeys.keycode, key[1] = status
 #Процедура проверки только что нажатых клавиш
if key[1] == KX_JUSTACTIVATED:  
    if key[0] == GameKeys.WKEY:
    #Здесь должна быть функция ,выполняемая при нажатии клавиши "W"
    if key[0] == GameKeys.SKEY:
    #Здесь должна быть функция ,выполняемая при нажатии клавиши "S"
     f key[0] == GameKeys.AKEY:
    #Здесь должна быть функция ,выполняемая при нажатии клавиши "A"
    if key[0] == GameKeys.DKEY:
    #Здесь должна быть функция ,выполняемая при нажатии клавиши "D"

Mouse_sensor

[править]

С применением только модуля GameLogic

[править]

http://www.blender3d.org/documentation/pydoc_gameengine/PyDoc-Gameengine-2.34/SCA_MouseSensor.SCA_MouseSensor-class.html

import GameLogic
posiziya_X = 1  # Переменная для работы с координатой Х -целое число                                                                                                                                       
posizya_Y = 1  # Переменная для работы с координатой Y -целое число

co = GameLogic.getCurrentController()  #Привязываем GameLogic к контроллеру "со"     
obj_name = co.getOwner()  #Привязываем контроллер к объекту с именем "obj_name"
grizun = co.getSensor("grizun")  #Привязываем сенсор "grizun" к контроллеру "со"

posizya_X = grizun.getXPosition()  #присваиваем переменной значение координаты Х 
posizya_Y = grizun.getYPosition()  #присваиваем переменной значение координаты Y

С применением модуля Rasterizer

[править]

http://www.blender3d.org/documentation/pydoc_gameengine/PyDoc-Gameengine-2.34/Rasterizer-module.html

# To use a mouse movement sensor "Mouse" and a 
 # motion actuator to mouse look:
import Rasterizer
import GameLogic

 # SCALE-чуствительность мыши
SCALE=[1, 0.5]
       
co = GameLogic.getCurrentController()
obj = co.getOwner()#связывание контроллера с объектом по имени "obj"
mouse = co.getSensor("mouse")#привязывание сенсора мыши к контроллеру
lmotion = co.getActuator("LMove")# привязывание активатора "lmotion" к контроллеру "co"
wmotion = co.getActuator("WMove")# привязывание активатора "wmotion" к контроллеру "co"
       
 #Запись координат x , y  как только мышь будет перемещена
def mousePos():
  x = (Rasterizer.getWindowWidth()/2 - mouse.getXPosition())*SCALE[0]
  y = (Rasterizer.getWindowHeight()/2 - mouse.getYPosition())*SCALE[1]
      return (x, y)
       
pos = mousePos()
       
 # скорость перемещения для  мыши :X в общих координатах...
lmotion.setTorque(0.0, 0.0, pos[0], False)
 # ...Y в общих координатах
wmotion.setTorque(-pos[1], 0.0, 0.0, True)
       
 # запускаем активаторы в работу
 GameLogic.addActiveActuator(lmotion, True)
 GameLogic.addActiveActuator(wmotion, True)
       
 #устанавливаем мышь по центру окна(экрана)
Rasterizer.setMousePosition(Rasterizer.getWindowWidth()/2, Rasterizer.getWindowHeight()/2)


Примеры

[править]

Автор

[править]

Михаил Васильев http://blender3dgames.fastbb.ru

См. также

[править]

Python в Blender 2.77