000158. Динамическая GXT-таблица или виртуальные GXT-записи
Динамическая GXT-таблица или виртуальные GXT-записи|Всем привет! С Вами wmysterio, и сегодня мы рассмотрим небольшую тему, связанную с игровыми текстами.|wmysterio|wmysterio||||В этом уроке мы рассматривали возможность создания текстовых таблиц ( GXT-таблицы ). Теперь у нас появилась возможность создавать такие таблицы динамически ( их называют ещё виртуальными ), прямо в скрипте. Таким образом мы изучим четвёртый способ использования текстовый тип данных. Напомню, что ранее мы было опубликовано такие темы как FXT-архивы, форматированный текст и GXT-таблицы.
Для добавления в динамичную таблицу текста в скрипте мы должны использовать следующий опкод:
Здесь: "DYNTABL" - имя поля в нашей виртуальной таблице. Важно! Длина имени должна составлять не больше 7 символов, как и в обычной GXT- или FXT-записи. Кроме этого, они обязательно должны быть взяты именно в двойные кавычки. "My test string" - содержание поля
Для удаления нужно использовать:
Здесь: "DYNTABL" - имя поля в нашей виртуальной таблице.
Также нам доступны следующие опкоды, которые помогают избежать вылетов или неточностей:
Получает позицию входа записи в виртуальной таблице, где:
Здесь: 0@ - переменная, в которую будет записана позиция строки 0@v в таблице
Также мы можем получать длину строки, что иногда полезно при рисовании на экране:
Здесь: 'XSELECT' - имя записи 1@ - значение, которое будет подставлено вместо ~1~ 0@ - переменная, в которою запишется длина
Кроме этого, нам доступна важная проверка, которая проверяет на пустоту строки. Полезно, когда строка не загрузилась и нам не пришлось потом выводить деформированную запись:
Здесь: s$GXT_NAME - имя записи
Давайте напишем скрипт, который будет последовательно выводить текст:
Результат:
Рассмотрим пример с массивами. Здесь дела интереснее. Я потратил целый день, чтобы составить адекватный алгоритм, который будет работоспособным для панели, которую я и предлагаю сделать сейчас.
Для начала нам необходимо объявить 2 массива, чтобы сократить код с помощью цикла:
$TAB_NAME будет отвечать за имя виртуальной GXT-записи. Второй массив $TAB_LIST будет отвечать за содержимое записи ( vСтрока ), поэтому тип указываем как longstring. Далее заполняем наш массив значениями и создаём виртуальную GXT-таблицу в цикле:
Здесь главное указывать значения для s$TAB_NAME длиной не больше 7 символов. В противном случае таблица будет пустой. Значения для v$TAB_LIST заполняем как обычно.
× **ВАЖНО:** Я заметил, что по-умолчанию игнорируются все пробелы при выводе текста. Чтобы игра адекватно отображала этот символ, его нужно подменить на символ '**_**'. В таком формате символ пробела отображается как и ожидалось
Заполнение массива в цикле должно быть без приставок v или s возле переменных. После этого мы можем вывести панель ( таблицу ):
Дальше нужно использовать короткие строки ( 8-ми байтные ), по-этому возле массива указываем s$TAB_NAME а не v$TAB_NAME. Когда панель нам больше не нужна, выгружаем виртуальную таблицу GXT-записей:
Полный код скрипта будет следующим:
Суть этого скрипта проста: нажимаем пробел - панель убирается. Если при этом выбрана первая строка, то даём в придачу ещё 1000 долларов. Результат:
Также я заметил, что важно ещё и то, что массивы вступают в силу только тогда, когда весь код скрипта не приводит к ошибке. Это очень плохо, потому, что нельзя узнать будет отображаться текст или нет. Возможно ( и я надеюсь ), что это только у меня так :)
На этом всё. С Вами был wmysterio, до встречи в новых уроках!|1636|1|0|21104994png
1280768
400240``\|77832249
png600
360400
240``||dinamicheskie_tesktovye_gxt_tablicy|1504601423
Last updated