Python в игростроении/Blender/GameLogic/Keyboard sensor
(перенаправлено с «Blender 3D (первый вариант перевода)/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" сенсора клавиатуры(см рисунок)-она должна быть задействована!