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

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

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

Скрипт показывает как привязать управление с помощью клавиш WASD (W-вперёд,S-назад,A-влево,D-вправо) к объекту "Sphere":

  • создаём объект Sphere;
  • выбираем его в 3D окне(object mode);
  • переходим в раздел редактора Logic (F4);
  • создаём логикбрик для сенсора. Тип Keyboard. Переименовываем 'sensor' в 'klavishi';
  • создаём логикбрик для контроллера. Тип Python (имя зададим позже);
  • создаём логикбрик для активатора. Тип Motion.Переименоваваем 'act' в 'dvizh';
  • копируем находящийся на этой странице скрипт в файл wasd.py;
  • переходим в текстовый раздел Блендера и загружаем созданный файл;
  • возвращаемся в раздел Logic к контроллеру.Задаём имя скрипта wasd.py;
  • соединяем эти 3 логикбрика линками;
  • помещаем курсор мыши в 3Д окно и нажимаем "p".

Если всё сделано правильно, то объектом "Sphere" можно будет управлять с помощью клавиш WASD. Замечание: если появилась ошибка, то скорее всего из-за нарушения формата текста. Будьте внимательны к отступам!

 # ЗДЕСЬ ИСПОЛЬЗУЕТСЯ ТРАНСЛИТ, ЕГО НЕ РЕКОМЕНДУЕТСЯ ИСПОЛЬЗОВАТЬ - ЭТО ЗАТРУДНЯЕТ ЧТЕНИЕ КОДА
 #----------------Начало скрипта------------------
 import GameLogic
 import GameKeys 
 
 co = GameLogic.getCurrentController()   #Привязываем скрипт к контроллеру "со" -смотри картинку
 klavishi = co.getSensor('klavishi')     #Привязываем сенсор "klavishi" к контроллеру "со" -смотри картинку
 dvizh=co.getActuator('dvizh')           #Связываем контроллер "со" с активатором "dvizh" -смотри картинку
 GameLogic.addActiveActuator(dvizh,True) #Делаем этот активатор доступным для GameLogic
 
 #--------------------------------------------------------------------------
 #ВНИМАНИЕ! -этот раздел служит для наглядности работы сенсора клавиатуры
 #перед его изучением смотрите раздел СЕНСОР КЛАВИАТУРЫ
 #--------------------------------------------------------------------------
 
 #Функции обработки тоько что нажатых клавиш
 def pered():
   dvizh.setDLoc(0,0.1,0,0) #объект теперь двигается по оси У со значением 0.1  принцип-(x,y,z,local)
 def nazad():
   dvizh.setDLoc(0,-0.1,0,0)
 def vlevo():
   dvizh.setDLoc(-0.1,0,0,0)
 def vpravo():
   dvizh.setDLoc(0.1,0,0,0)
 
 #Функции обработки только что отпущенных клавиш
 def pered_stop():
   dvizh.setDLoc(0,0,0,0)	#Объект не двигается .скорость по всем осям=0
 def nazad_stop():
   dvizh.setDLoc(0,0,0,0)	
 def vlevo_stop():
   dvizh.setDLoc(0,0,0,0)
 def vpravo_stop():
   dvizh.setDLoc(0,0,0,0)
 
 #-----------------------------------------
 # СЕНСОР КЛАВИАТУРЫ
 #-----------------------------------------
 
 # 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:
     pered()
   if key[0] == GameKeys.SKEY:
     nazad()
   if key[0] == GameKeys.AKEY:
     vlevo()
   if key[0] == GameKeys.DKEY:
     vpravo()
 
 #Процедура проверки только что отпущенных клавиш
  if key[1] == KX_JUSTRELEASED:
   if key[0] == GameKeys.WKEY:
     pered_stop()
   if key[0] == GameKeys.SKEY:
     nazad_stop()
   if key[0] == GameKeys.AKEY:
     vlevo_stop()
   if key[0] == GameKeys.DKEY:
     vpravo_stop()
 #---------------------Окончание скрипта-----------------------

картинка необходима для правильного понимания скрипта

Обратите внимание на опцию "all keys" сенсора клавиатуры(см рисунок)-она должна быть задействована!

wasd.blend - готовый файл примера в формате блендера