Воскресенье, 22 Декабря 2024, 13:56

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Ввод текста
MrSlapДата: Вторник, 09 Июня 2015, 03:36 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Доброй ночи, други.
Была такая проблема: искал по примерам, как реализовать ввод строки - имени, или ещё чего-нибудь. И примеры сводились к одному и тому же варианту. Может плохо искал?
Там была проблема, которую завсегдатаи форума ввиняли создателям гамака - отсутствие прописных кириллических букв от А до П. Не мудрствуя лукаво, написал вот такой простой код:
Create:
Код
key='';
str='';

Draw:
Код
draw_set_font(font0) //заранее выбрать шрифт и вбить в него русский алфавит
draw_text(10,10,string(str)) //рисуем строку

if keyboard_check_pressed(vk_anykey) //нажатие клавиши
{
    if !keyboard_check_pressed(vk_shift)  
    and !keyboard_check_pressed(vk_backspace)  
    and !keyboard_check_pressed(vk_delete)
    {
      if (string_length(str) < 30) // максимум символов в строке
      {  
      key=keyboard_lastchar //нажатая клавиша
      str += key //добавление буквы в строку
      }  
    }
    if keyboard_check_pressed(vk_backspace) //бэкспейс
    {
    if (string_length(str) > 0) //в строке есть символы
       {
       str=string_delete(str,string_length(str),1) //удаляем последний символ
       }
    }
    if keyboard_check_pressed(vk_delete)
    {
       str=string_delete(str,1,1) //удаляем первую букву
    }
}


И теперь у меня всё работает. Конечно, можно накинуть проверок, для запрета отрисовки различных символов. Интегрировать этот код в какое-нибудь поле для набора не составит большого труда.

P.S. Не знал, куда закинуть эту заметку. Кстати, куда лучше выкладывать подобные примеры кода? Или лучше никуда? Но, судя по всему, не мало начинающих ребят ищут решение такой же проблемы. Может, кому-то поможет мой костыль?
P.P.S. Еще нарисовал себе решение с приятной глазу прокруткой (скроллингом) текста в surface, тоже могу выложить.
YellowAfterlifeДата: Вторник, 09 Июня 2015, 09:27 | Сообщение # 2
Сейчас нет на сайте
Данная проблема - баг (ссылка на рапорт), который слишком уж неспешно исправляют.
Ещё риведенный код можно немного упростить с помощью "else if"
draw_set_font(font0) //заранее выбрать шрифт и вбить в него русский алфавит
draw_text(10,10,string(str)) //рисуем строку

if keyboard_check_pressed(vk_anykey) //нажатие клавиши
{
    if keyboard_check_pressed(vk_backspace) //бэкспейс
    {
        if (string_length(str) > 0) //в строке есть символы
        {
            str=string_delete(str,string_length(str),1) //удаляем последний символ
        }
    }
    else if keyboard_check_pressed(vk_delete)
    {
       str=string_delete(str,1,1) //удаляем первую букву
    }
    else if !keyboard_check_pressed(vk_shift)
    {
        if (string_length(str) < 30) // максимум символов в строке
        { 
            key=keyboard_lastchar //нажатая клавиша
            str += key //добавление буквы в строку
        }
    }
}

Такой подход вполне нормально работает, но имеет один дефект - при зажатии кнопки буквы не будут вводится\стираться с указанной в системных настройках клавиатуры скоростью, как это происходит при использовании обычного keyboard_string.




Сообщение отредактировал YellowAfterlife - Вторник, 09 Июня 2015, 09:28
OpenGOOДата: Вторник, 09 Июня 2015, 17:14 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
Ещё вариант, но keystring содержит последние нажатые символы.

Create:
Код
KEYSTRING_MAX = 1024;
keystring = "";


Key Press <Any key>:
Код
var code = keyboard_lastkey;
if code != -1
{     
     if code == vk_backspace
     {
         keystring = string_copy(keystring, 1, string_length(keystring) - 1);
     }
     else if (code > 47 && code < 58) || (code > 64 && code < 91) || code == 32
     {
         keystring += keyboard_lastchar;
         if (string_length(keystring) > KEYSTRING_MAX)
         {
             keystring = string_copy(keystring, 2, KEYSTRING_MAX);
         }
     }
}



Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
KiteKatДата: Четверг, 29 Июня 2017, 22:59 | Сообщение # 4
почетный гость
Сейчас нет на сайте
MrSlap здравствуйте . последовал вашему примеру и получилась ерунда какая-то... я надеюсь вы сможете мне разъяснить что к чему :( https://gcup.ru/forum/36-98574-1
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг