Сделал ListBox с выбором оружия и выводом изображения с ним, всё работает, но когда добавил новый класс cfgMagazines началась чертовщина и теперь не могу разобраться как вставить новый cfg в цикл. Вот кусок моего кода:
Лучший Ответ Schatten , 12 October 2021 - 17:37
Как правильно их тепеь вызвать?
Как правильно расписано, например, здесь. Но ты сначала лучше реши основную проблему, а потом уже оптимизацией заниматься будешь.
Перейти к сообщениюОтправлено 10 October 2021 - 13:59
Сделал ListBox с выбором оружия и выводом изображения с ним, всё работает, но когда добавил новый класс cfgMagazines началась чертовщина и теперь не могу разобраться как вставить новый cfg в цикл. Вот кусок моего кода:
Отправлено 10 October 2021 - 15:53
SaM0109, что содержит _magazines и откуда эта переменная берётся?
2-й отдельный массив с магазинами, что-то вроде этого:
Сейчас пробую через контрол onLBSelChanged это всё провернуть, но получается таже каша...
Отправлено 10 October 2021 - 16:17
SaM0109, во-первых, нужно в качестве индекса использовать не _forEachIndex, а тот, который возвращает lbAdd; во-вторых, лучше использовать синтаксис, который требует control, а не ID. То есть добавлять в список надо так:
{ _displayName = getText (configFile >> "CfgMagazines" >> _x >> "displayName"); _index = _control lbAdd _displayName; _control lbSetData [_index, _x]; } forEach _MagazinesArray;
В-третьих, поскольку у тебя в списке вещи из разных конфигов, то в onLBSelChanged нужно определять этот конфиг, а потом уже извлекать картинку и устанавливать её:
params ["_control", "_index"]; if (_index < 0) exitWith { }; _className = _control lbData _index; _configName = switch (true) do { case (isClass (configFile >> "CfgWeapons" >> _className)): { "CfgWeapons" }; case (isClass (configFile >> "CfgMagazines" >> _className)): { "CfgMagazines" }; default { "" }; }; if (_configName == "") exitWith { }; _picture = getText (configFile >> _configName >> _className >> "picture"); _control = _display displayCtrl 1200; _control ctrlSetText _picture;
Сообщение отредактировал Schatten: 10 October 2021 - 16:18
Отправлено 10 October 2021 - 16:41
Прости я далёк от этого. А добавлять ID контрола в каком месте или вообще не надо? Если не затруднит мог бы переделать из моего?
Отправлено 10 October 2021 - 16:48
. Поэтому перед добавлением в список получи его. Переделать из твоего не получится, поскольку я не знаю идентификатор дисплея.
Отправлено 10 October 2021 - 16:55
Отправлено 10 October 2021 - 17:01
Тот который 1234?
Да.
_display = findDisplay 1234; if (isNull _display) exitWith { }; _control = _display displayCtrl 1500;
В onLBSelChanged дисплей можно получить так:
_display = ctrlParent _control;
Сообщение отредактировал Schatten: 10 October 2021 - 17:02
Отправлено 10 October 2021 - 17:11
Теперь я ещё больше запутался
Отправлено 12 October 2021 - 11:38
С первым кодом я всё понял. Список работает. Со вторым кодом где onLBSelChanged почти, но Арма ругается на _control Я ещё далеко в этом не мастер, но полагаю, что он там не определён... Так?
Отправлено 12 October 2021 - 13:37
Я об этом вспомнил на работе пока был, а потом из головы вылетело Как правильно их тепеь вызвать? Сорян и СПС!
Сообщение отредактировал SaM0109: 12 October 2021 - 14:19
Отправлено 12 October 2021 - 17:37 Лучший Ответ
Как правильно их тепеь вызвать?
Как правильно расписано, например,
. Но ты сначала лучше реши основную проблему, а потом уже оптимизацией заниматься будешь.Отправлено 12 October 2021 - 17:45
Ясно, спасибо, думаю (надеюсь) разберусь...
Сообщение отредактировал SaM0109: 12 October 2021 - 17:50