Автор Тема: Как в BGE сделать ввод текста с клавиатуры?  (Прочитано 2234 раз)

Оффлайн Niburiec

  • Житель
Например, начальная сцена с предложением "Введите имя" и текстовое поле, в которое игрок вводит своё имя ? Как это реализовать? Я так понимаю, что нужно снимать сканкоды с клавиш и отображать их в поле. Пробовал - не получилось. Снимаю коды с клавиш (sen = cont.sensors["Keyboard"] , keyCode = sen.key , text.text = str(keyCode)) и при любом нажатии выдаёт ноль.  :( Что не так? Подскажите, или посоветуйте ?! ??? ??? ???

[вложение удалено Администратором]
« Последнее редактирование: 24 Январь 2015, 04:31:59 от Niburiec »

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Как в BGE сделать ввод текста с клавиатуры?
« Ответ #1 : 24 Январь 2015, 06:05:52 »
>> и при любом нажатии выдаёт ноль.
... для твоего кода попробуй сделать так ...

Код: Python
    # получить сканкод нажатой клавиши
es = sen.events[0]

if es[1]==1:
    keyCode = es[0]
    if keyCode == 133:
        text.text = text.text[:(len(text.text)-1)]
    elif keyCode == 13:
        pass
    else:
        text.text += chr(keyCode))

... но понятно что нужно обрабатывать не только буквы и цифры, но и символы управления такие как удаление символа, ввод, перемещение стрелками по тексту - то есть в таком варианте рутины много ...



[вложение удалено Администратором]
Для Кота

Оффлайн Niburiec

  • Житель
Re: Как в BGE сделать ввод текста с клавиатуры?
« Ответ #2 : 24 Январь 2015, 16:11:51 »
Гигантское всеогромнейшее спасибо !!! На мой взгляд, это пригодится не только мне. Единственная просьба, если вам не трудно прокомментировать каждую строку. Их там не много... Просто уж очень хочется понять, что каждая строка делает. А так, всё вышло просто замечательно.

Да и перемещение по тексту не обязательно. Ведь задача не ставилась написать текстовый редактор. Для ввода имени игрока или каких-то данных вполне достаточно.

По ходу ещё маленький вопрос - как введённый текст можно перенести в другую сцену или сохранить как-то для последующего использования в игре?

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Как в BGE сделать ввод текста с клавиатуры?
« Ответ #3 : 24 Январь 2015, 17:13:43 »
Здесь наверное самое не очевидное это очередь событий клавиатурного сенсора. Очередь событий это список пар значений кода клавиши и статуса. И для данного примера из этой очереди берется первый элемент (индекс 0).
 
Код
es = sen.events[0]

http://www.blender.org/api/blender_python_api_2_73a_release/bge.types.SCA_KeyboardSensor.html?highlight=events#bge.types.SCA_KeyboardSensor.events

То есть es - это первое событие в очереди, а es[0] - это код клавиши, es[1] - статус клавиши (1- нажата, 3-отпущена)

Поскольку в очередь событий помещаются и события нажатия и отпуска клавиши, то нужно обрабатывать только один тип, например нажатия клавиши

Код
if es[1]==1:

Если была нажата клавиша backspace (код=133), то удаляем последний символ в строке
Код
    if keyCode == 133:
        text.text = text.text[:(len(text.text)-1)]

Если нажали ввод, то ничего не делаем, а могли бы :)
Код
    elif keyCode == 13:
        pass

Иначе если нажата другая клавиша, то переводим её код в ascii символ функцией chr и прибавляем этот символ к концу строки ...
Код
    else:
        text.text += chr(keyCode))

Для Кота

Оффлайн Niburiec

  • Житель
Re: Как в BGE сделать ввод текста с клавиатуры?
« Ответ #4 : 24 Январь 2015, 17:48:06 »
Цитировать
То есть es - это первое событие в очереди, а es[0] - это код клавиши, es[1] - статус клавиши (1- нажата, 3-отпущена)
...
Ещё одна благодарность. Именно это место мне было больше всего не понятно. Теперь всё разложено по полкам.

А по второму вопросу... Как сохранить введённый текст и использовать в следующих сценах? То бишь, нажимаем ввод и... переходим в другую сцену, где введённое имя всегда висит в уголке :)

Как прикрепить текст к камере понятно, а вот как его перенести из предыдущей сцены?
« Последнее редактирование: 24 Январь 2015, 17:51:46 от Niburiec »

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Как в BGE сделать ввод текста с клавиатуры?
« Ответ #5 : 24 Январь 2015, 18:53:28 »
>> Как прикрепить текст к камере понятно, а вот как его перенести из предыдущей сцены?
... через глобальный словарь, посредством сообщений ... ...

http://wiki.blender.org/index.php/Doc:RU/2.6/Manual/Game_Engine/Logic/Actuators/Message

... пример во вложении ...

[вложение удалено Администратором]
Для Кота

Оффлайн Niburiec

  • Житель
Re: Как в BGE сделать ввод текста с клавиатуры?
« Ответ #6 : 24 Январь 2015, 19:05:50 »
Замечательно! Считаю что получил полные ответы на мои вопросы. Спасибо вам за то, что делитесь знаниями.

Оффлайн Niburiec

  • Житель
Re: Как в BGE сделать ввод текста с клавиатуры?
« Ответ #7 : 26 Январь 2015, 23:50:42 »
Правда я внёс некоторые коррективы. Сделал проверку длины строки. Полностью отказался от актуатора и сенсора Message и убрал строку print(text2.text) . Перестало тормозить при переходе в следующую сцену.

А с Message так ничего и не понял... Зачем передавать актуатору текст сообщения, если сенсор Message не в состоянии его принять ? Ведь сенсор (как я понял) при получении сообщения просто выдаёт импульс и всё ?! Им можно что-то включить, но прочитать сообщение нельзя по видимому  ???.

[вложение удалено Администратором]

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 106
Автор: LEXA ANЭGROWND
blender.png
Скачано: 112
Автор: ipv2007
4.png
Скачано: 139
Автор: hiroyukiss
2.png
Скачано: 162
Автор: hiroyukiss

Скачано: 172
Автор: Dilifa12