Python в игростроении/Blender/GameLogic/Keyboard sensor: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 11: Строка 11:
*возвращаемся в раздел Logic к контроллеру.Задаём имя скрипта wasd.py;
*возвращаемся в раздел Logic к контроллеру.Задаём имя скрипта wasd.py;
*соединяем эти 3 логикбрика линками;
*соединяем эти 3 логикбрика линками;
*помещаем курсор мыши в 3Д окно и нажимаем "p";
*помещаем курсор мыши в 3Д окно и нажимаем "p".

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


#----------------Начало скрипта------------------
#----------------Начало скрипта------------------

Версия от 16:41, 31 мая 2006

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

  • создаём объект Sphere;
  • выбираем его в 3Д окне(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()
#---------------------Окончание скрипта-----------------------

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