Модератор форума: Slon |
Форум РЕДАКТОР - ArmA 2 Operation Arrowhead Скрипты Создание диалогов. Очень просто! (Пусть вас не пугает огромное кол-во текста.) |
Создание диалогов. Очень просто! |
› Вторник
› 25.11.2014
› 20:12
› Сообщение #
200-i,
Цитата Вот только понять не могу как полноценно можно работать с GUI если с его редактированием такие ограничения... Вот смотрите я делаю доп инвентарь, по сюжету это будет виртуальная сумочка под всякую мелочь. Там должны лежать те вещи которые в арме не предусмотрены для лежания в инвентаре. Вопрос встал только с GUI. Представим что этот инвентарь имеет форму квадрата, в нем кнопки с изображением предметов лежащих в нем, так вот когда я кладу туда предметы то можно рассчитать сколько сейчас находится в инвентаре предметов и определить текущему его местоположение, но если я из середины беру предмет, то как мне передать тем, что лежали после него, что им нужно сдвинуться и заполнить пустое пространство??? Если на каждое место в инвентаре сделать соответствующую переменную (_а = 1, _b = 1, с = 1...) при помещении предмета в инвентарь менять тут переменную на которую помещен предмет допустим на 1 и тогда теоретически можно сделать проверку на то, какое из мест занято и делать эту проверку при помещении предметов в инвентарь и удалении предметов. Как думаете так пойдет или есть варианты проще? 1. Создать массив, который будет содержать все предметы в определённом формате. Простой формат: [name (string), count (number)] 2. Процесс отображения предметов оформить как функцию 3. При удалении элемента получать имя соответсвующему ему предмета в массиве и по нему изменять исходный массив предметов (см п.1): если количество предметов > 0 то количество - 1 иначе удалить элемент массива. После изменений вызвать функцию (см п.2) Добавлено (25.11.2014, 20:12)
Cтруктуры данных важнее кода!
Список команд | Список оружия | Список техники | Список юнитов | Список объектов Armstalker Online |
› Четверг
› 27.11.2014
› 22:24
› Сообщение #
ZoRRo, Спасибо)
Добавлено (27.11.2014, 22:24) |
› Четверг
› 27.11.2014
› 23:03
› Сообщение #
200-i, не понятно чего ты хочеш сделать? текст вывести ? но там разные элементы, в статику будет так
ctrlSetText [idc, text] в ЛБ - при открытии так _index = lbAdd [101, "First item"]; в действующий (замена) так _control lbSetData [1, "#1"]; в ЛБН запись проводится сразу на всю строку lnbAddArray [102,[[["#1"],[1],["#1"]]]]; а замена по ячейке. _ctrl lnbSetText [ [row,column],data] |
› Пятница
› 28.11.2014
› 13:51
› Сообщение #
Slon, Я хочу вывести не текст а то чему равняется в данный момент "b". То есть переменная b будет постоянно меняться а мне нужно чтоб ее значение можно было выводить на экран при помощи GUI а не того как я написал.
hint format ["Значение переменной %1", "b"]; // так значение появится в области действия hint (не знаю как эта область правильно зовется) в виде "Значение переменной 100", если переменная изменится, то все равно правильный результат будет показан. Вот мне нужно сделать это только в GUI. В ваших примерах как я понял написан несколько способов замены обычного текста в GUI. Добавлено (28.11.2014, 13:51) |
› Пятница
› 28.11.2014
› 15:55
› Сообщение #
200-i,
Цитата _text = "Баланс" + (Str _b); ctrlSetText [100002, _text]; Результат в GUI с ids 100002 вместо текста "Баланс 90". 90 это текущее значение _b Чтобы получить только число из строки можно воспользоваться parseNumber: Код _value = parseNumber (ctrlText 100002);
Cтруктуры данных важнее кода!
Список команд | Список оружия | Список техники | Список юнитов | Список объектов Armstalker Online |
› Пятница
› 28.11.2014
› 17:05
› Сообщение #
|
› Суббота
› 29.11.2014
› 13:07
› Сообщение #
Спасибо господа) Обязательно воспользуюсь вашими вариантами!!!
Если вызываю диалог с помощью команды cutRsc то как можно скрывать его элементы не перезапуская его? ctrlShow [200025, false]; так получается только если запустил createDialog так. Сделал показатели здоровья, голода и жажды. Вывел на постоянное нахождение на экран и думал, что легко смогу его редактировать, но привычная и устраивающая меня команда ctrlShow отказалась трудиться((( Ребят спасите еще разок. И там в табличке должен баланс счета денежного в уголочке отображаться, я так понимаю с ним тоже будет проблема ctrlSetText будет ли работать или нет. |
› Суббота
› 29.11.2014
› 13:50
› Сообщение #
createDialog - открывает GUI. одновременно может быть только Один диалог, ctrlShow [200025, false]; в нём достаточно.
cutRsc - открывает HUD . их может быть открыто множество, и для общения одного idc недостаточно, определяется номер потока. запуск скрипта удобней сделать в Description.ext из описания класса class TownCaptureProgress { idd = 5800; duration = 15000; onLoad = "_as = _this Spawn fn_Rsc_stat"; в функции получаеш контрол _display = findDisplay _this; _control = _display displayCtrl 200025; _control ctrlShow false; большенство команд представлено в двух вариантах Example 1: - ctrlShow [100, false ]; Example 2: - _control ctrlShow false; Сообщение отредактировал Slon - Суббота, 29.11.2014, 14:00
|
› Среда
› 17.12.2014
› 11:02
› Сообщение #
Спасибо за разъяснение. Для моего варианта куда проще будет изменить идею и все же использовать createDialog. Там очень много будет использоваться скрытие, замена текста и так далее.
Добавлено (17.12.2014, 11:02) |
› Четверг
› 18.12.2014
› 00:09
› Сообщение #
200-i, при открытии диалога надо провести заполнение ЛБ. командой
https://community.bistudio.com/wiki/lbAdd делается это в цикле выбирая параметры из массива, каждый проход создаёт одну строку _ms = ["1", "2", "3"]; { lbAdd [5001, _x] } forEach _ms; для реализации клика используют обработчик onMouseButtonClick строка прописывается в классе ЛБ в Дескрипшене. https://community.bistudio.com/wiki/User_Interface_Event_Handlers onMouseButtonClick = " [] execVM 'File.sqf' "; пример из конфига Цитата class CA_ValueAspectRatio : RscCombo { idc = 134; onLBSelChanged = "private ['_dummy']; _dummy = [_this, 'onLBSelChanged'] execVM '\ca\ui\scripts\UISizeVideoOptions.sqf'; _dummy;"; onMouseButtonDown = "private ['_dummy']; _dummy = [_this, 'onMouseButtonDown'] execVM '\ca\ui\scripts\UISizeVideoOptions.sqf'; _dummy;"; x = 0.838242; y = "((SafeZoneH + SafeZoneY) - (1 - 0.83334)- 0.09)"; sizeEx = 0.026740; }; class HideAdvanced : RscShortcutButton { idc = 345; x = 0.028000; y = "(SafeZoneH + SafeZoneY) - (1 - 0.908)"; text = "$STR_CA_ADV_SHOW"; OnButtonClick = "private ['_dummy']; _dummy = [_this, "CA_VO_ToggleAdvanced"] call compile preprocessfilelinenumbers "\ca\ui\scripts\HideVideoOptions.sqf"; _dummy;"; }; class HideDialog : HideAdvanced { idc = 344; x = 0.221000; text = "$STR_CA_HIDE"; OnButtonClick = "private ['_dummy']; _dummy = [_this, "CA_VO_ToggleAll"] call compile preprocessfilelinenumbers "\ca\ui\scripts\HideVideoOptions.sqf"; _dummy; "; }; class VideoDefault : HideAdvanced { idc = 129; x = 0.414000; text = "$STR_DISP_DEFAULT"; onMouseEnter = "private ['_dummy']; _dummy = [_this, 'onMouseButtonDown'] execVM '\ca\ui\scripts\UISizeVideoOptions.sqf'; _dummy;"; OnButtonClick = "private ['_dummy']; _dummy = [_this, 'onLBSelChanged'] execVM '\ca\ui\scripts\UISizeVideoOptions.sqf'; _dummy;"; }; Сообщение отредактировал Slon - Четверг, 18.12.2014, 00:14
|
› Четверг
› 18.12.2014
› 13:52
› Сообщение #
Slon, Спасибо, кое что уяснил. Но с целым рабочим примером было бы яснее)))) Ну а в целом конечно вы мне уже и так очень помогли)
|
› Четверг
› 18.12.2014
› 20:31
› Сообщение #
можно и с примером
Прикрепления:
LB.utes.rar
(2.1 Kb)
|
› Воскресенье
› 21.12.2014
› 16:47
› Сообщение #
Slon, Вот спасибо Вам) ZoRRo, тоже скинул пример, теперь я просто обязан понять как тут и что работает)
Добавлено (21.12.2014, 16:47) Код class RscTitles { class golod { idd = 200000; duration = 15000; onLoad = "_as = _this Spawn fn_Rsc_stat"; // Пишу прямо по вашему примеру class Controls { class ramka: RscPicture { idc = 200001; text = "images\jeludok\ramka_pokozatel.paa"; x = 0.75 * safezoneW + safezoneX; y = 0.83 * safezoneH + safezoneY; w = 0.25 * safezoneW; h = 0.17 * safezoneH; colorText[] = {1,1,1,1}; }; class zdorovie_polosa_1: RscPicture { idc = 200010; text = "images\jeludok\zdorovie_polosa.paa"; x = 0.8037 * safezoneW + safezoneX; y = 0.866 * safezoneH + safezoneY; w = 0.019 * safezoneW; h = 0.015 * safezoneH; colorText[] = {1,1,1,1}; }; Это из скрипта Код cutRsc ["golod","PLAIN"]; // Запуск sleep 10; // Задержка _display = findDisplay _this; _control = _display displayCtrl 200010; // указал idс 200010 для скрытия нужного элемента _control ctrlShow false; В итоге ни чего не происходит. Где ошибка подскажите. |
› Воскресенье
› 21.12.2014
› 17:53
› Сообщение #
из какого скрипта? тута запуск функции onLoad = "_as = _this Spawn fn_Rsc_stat"; и все операции с этим титлом надо делать там. так что твой скрипт должен выглядеть так fn_Rsc_stat = { disableSerialization; _display = _this; _control = _display displayCtrl 200010; // указал idс 200010 для скрытия нужного элемента _control ctrlShow false; }; cutRsc ["golod","PLAIN"]; // Запуск Сообщение отредактировал Slon - Воскресенье, 21.12.2014, 17:58
|
› Воскресенье
› 21.12.2014
› 19:18
› Сообщение #
Slon, В таком виде
Код fn_Rsc_stat = { disableSerialization; _display = _this; _control = _display displayCtrl 200010; // ОШИБКА В ЭТОЙ СТРОКЕ _control ctrlShow false; }; cutRsc ["golod","PLAIN"]; // Запуск Выдает ошибку и перезапускает диалог без изменений((( Добавлено (21.12.2014, 19:03) Добавлено (21.12.2014, 19:18) Код onLoad = "_this call onRscLoad"; Скрипт Код onRscLoad = { private ["_display","_idc","_ctrl"]; _display = _this select 0; _idc = 200010; _ctrl = _display displayCtrl _idc; _ctrl ctrlShow false; _ctrl ctrlCommit 0; }; cutRsc ["golod","PLAIN"]; Но эти моргания портят всю картину. Возможно есть выход запускать каждый элемент такого диалога отдельно с разными слоями? Или слой с большим номером перепишет меньший? Есть возможность избавиться от этого? |
| |||
Чат сайта |