GPCracker 2,088 #397155 Posted July 11, 2017 Помогите с компонентом UILoaderAlt.Интуиция мне подсказывает, что это какой-то специфичный компонент. А UILoader не пробовал? Quote Share this post Link to post Short link Share on other sites
Tester 5 #397191 Posted July 11, 2017 (edited) Интуиция мне подсказывает, что это какой-то специфичный компонент. А UILoader не пробовал? Мой косяк... Нужно было отключить сохранение пропорций (maintainAspectRatio), он ведь включен по умолчанию. Правда при включенном остается проблема искажения, так как по умолчанию ставится размер 27х17 и соответственно от него устанавливаются пропорции. Странно, что после загрузки разрабы не обновляют переменные с оригинальными размерами. Edited July 11, 2017 by Tester Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #397218 Posted July 11, 2017 Странно, что после загрузки разрабы не обновляют переменные с оригинальными размерами.Ничего странного, это картошка. Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #397228 Posted July 11, 2017 (edited) Парни не поможите, что не так? Работало до версии 0.9.15 Пример: 'mod_Test.py' #=============================================================================================== # Константы #=============================================================================================== widthBW = 1000 heightBW = 600 #=============================================================================================== # Создание функции вызова окна встроенного браузера #=============================================================================================== from adisp import process from helpers import dependency from skeletons.gui.game_control import IBrowserController class BrowserWindow(object): @process def openBrowserWindow(self, url, title, browserID): global widthBW, heightBW width = int(widthBW) height = int(heightBW) browserSize = [width, height] browserCtrl = dependency.instance(IBrowserController) yield browserCtrl.load(url=url, title=title, browserID=browserID, browserSize=browserSize, showActionBtn=True, showCloseBtn=True, showWaiting=True) g_browserWindow = BrowserWindow() #=============================================================================================== # Создание окна в центре уведомлении с кнопкой #=============================================================================================== import BigWorld from notification.NotificationListView import NotificationListView from notification.settings import NOTIFICATION_BUTTON_STATE def messages(): return { 'typeID': 1, 'message': { 'bgIcon': '', 'defaultIcon': '', 'savedData': 0, 'timestamp': -1, 'filters': [], 'buttonsStates': {'cancel': NOTIFICATION_BUTTON_STATE.HIDDEN}, 'buttonsLayout': [ { 'action': 'action_1', 'type': 'submit', 'label': u'Кнопка 1', 'width': 80 }, { 'action': 'action_2', 'type': 'submit', 'label': u'Кнопка 2', 'width': 80 } ], 'type': 'black', 'icon': '', 'message': 'Пример - переход по ссылке', }, 'entityID': 99999, 'auxData': ['GameGreeting'] } orig_getMessagesList = NotificationListView._NotificationListView__getMessagesList def custom_getMessagesList(self): result = orig_getMessagesList(self) if self._NotificationListView__currentGroup in 'info': result.append(messages()) return result orig_onClickAction = NotificationListView.onClickAction def custom_onClickAction(self, typeID, entityID, action): if action == 'action_1': BigWorld.wg_openWebBrowser('https://worldoftanks.ru/') elif action == 'action_2': g_browserWindow.openBrowserWindow("https://koreanrandom.com/forum/", "Koreanrandom", "99999") else: orig_onClickAction(self, typeID, entityID, action) NotificationListView._NotificationListView__getMessagesList = custom_getMessagesList NotificationListView.onClickAction = custom_onClickAction Edited July 11, 2017 by night_dragon_on 1 Quote Share this post Link to post Short link Share on other sites
CyToTV 10 #404638 Posted September 20, 2017 Ребят, как создать такой же компонент Quote Share this post Link to post Short link Share on other sites
IzeBerg 128 #404639 Posted September 20, 2017 Ребят, как создать такой же компонент FieldSet Quote Share this post Link to post Short link Share on other sites
CyToTV 10 #404642 Posted September 20, 2017 FieldSet пример можно, если не сложно? Quote Share this post Link to post Short link Share on other sites
IzeBerg 128 #404644 Posted September 20, 2017 (edited) пример можно, если не сложно? import net.wg.gui.components.advanced.FieldSet; addChild(App.utils.classFactory.getComponent("FieldSet", FieldSet, {label: 'text', x: 0, y: topPadding, width: 220, height: 170})); Edited September 20, 2017 by IzeBerg Quote Share this post Link to post Short link Share on other sites
CyToTV 10 #405114 Posted September 24, 2017 (edited) sldr = new Slider(); sldr.x = 50; sldr.y = 50; sldr.width = 100; sldr.height = 25; sldr.value = 10; sldr.maximum = 23; sldr.minimum = 0; addChild(sldr); что не так? почему даже не показывает слайдер? UPD: вопрос снят. решил вот так sldr = addChild(App.utils.classFactory.getComponent("Slider", Slider, { width: 100, height: 25, minimum: 0, maximum: 0, x: 10, y: 10 })) as Slider; Вопрос #2: как навесить листенер. попробовал вот так: sldr.addEventListener(SliderEvent.VALUE_CHANGE, this.onChangeSldr); ... public function onChangeSldr(event:SliderEvent){ this.myFunction(this.sldr.value); } Edited September 24, 2017 by CyToTV Quote Share this post Link to post Short link Share on other sites
IzeBerg 128 #405115 Posted September 24, 2017 Только что, CyToTV сказал: sldr = new Slider(); sldr.x = 50; sldr.y = 50; sldr.width = 100; sldr.height = 25; sldr.value = 10; sldr.maximum = 23; sldr.minimum = 0; addChild(sldr); что не так? почему даже не показывает слайдер? Потому что классы scaleform.clik.controls.Slider и net.wg.gui.components.controls.Slider - это интерфейсы для взаимодействия с UI. Сам UI реализован например в классе Slider в guiControlsLobbyBattle.swf (импортится в лобби вроде бы). Вот это должно работать, но это не точно: sldr = App.utils.classFactory.getComponent("Slider", Slider, {x: 50, y: 50, width: 100, height: 25, value:10, minimum: 23, maximum:0}); addChild(sldr); Quote Share this post Link to post Short link Share on other sites
CyToTV 10 #405116 Posted September 24, 2017 2 минуты назад, IzeBerg сказал: Потому что классы scaleform.clik.controls.Slider и net.wg.gui.components.controls.Slider - это интерфейсы для взаимодействия с UI. Сам UI реализован например в классе Slider в guiControlsLobbyBattle.swf (импортится в лобби вроде бы). Вот это должно работать, но это не точно: sldr = App.utils.classFactory.getComponent("Slider", Slider, {x: 50, y: 50, width: 100, height: 25, value:10, minimum: 23, maximum:0}); addChild(sldr); все спасибо, разобрался. это, второй вопрос снимается. там maximum: 0 Quote Share this post Link to post Short link Share on other sites
John_Nash 41 #405297 Posted September 27, 2017 (edited) Кажется, пример mod_TestWindow.py с первой страницы не работает. Ничего не менял, окно в ангаре не создаётся. В лог питона вылетает ошибка 2017-09-27 16:55:03.038: ERROR: [EXCEPTION] (scripts/common/Event.py, 46): Traceback (most recent call last): File "scripts/common/Event.py", line 44, in __call__ File "res_mods\mod_TestWindow.py", line 32, in onhandleKeyEvent g_appLoader.getDefLobbyApp().loadView(_alias) File "scripts/client/gui/Scaleform/framework/application.py", line 325, in loadView File "scripts/client/gui/Scaleform/framework/managers/containers.py", line 1014, in load AttributeError: 'str' object has no attribute 'viewKey' Кроме того, при загрузке игры в логи вылетает вот такое (не факт, что имеет отношение к вопросу) 2017-09-27 16:54:41.646: WARNING: [WARNING] (scripts/client/gui/Scaleform/framework/managers/containers.py, 1213): Loading of view Hangar[0x2b04a170]=[key=ViewKey[alias=hangar, name=hangar], scope=SimpleScope[0x1bb911d0]=[scopeType=subView, parentScope=SimpleScope[0x1bb91150]=[scopeType=view, parentScope=GlobalScope[0x1bb91110]=[scopeType=global, parentScope=None]]], state=0] is requested but the container subView is still not exist! Edited September 27, 2017 by John_Nash Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #405298 Posted September 27, 2017 Только что, John_Nash сказал: Кажется, пример mod_TestWindow.py с первой страницы не работает. Ничего не менял, окно в ангаре не создаётся. В лог питона вылетает ошибка Ну клиент игры то обновляется же, а примеры нет. Функцию loadView изменили в 0.9.20. Quote Share this post Link to post Short link Share on other sites
John_Nash 41 #405300 Posted September 27, 2017 (edited) Спасибо -- уфф, отлегло, испугался было, что сам незаметно накосячил. Куда теперь копать, чтобы обратно заработало? Или, может, появились более легкие способы создавать окно в ангаре? Стандартная же задача. Update: нашел таки костыль, для ангара: надобно импортировать from gui.Scaleform.framework.managers.loaders import ViewLoadParams а потом заменить loadView(_alias) на loadView(ViewLoadParams(_alias, None)) Edited September 27, 2017 by John_Nash Quote Share this post Link to post Short link Share on other sites
Steeler 1 #407656 Posted October 18, 2017 В 27.09.2016 в 19:52, POLIROID сказал: Вот такой грязный фикс поможет с доступностью любого WG контрола в любом месте (буть то бой/ангар/экран логина) Ребят, поделитесь пожалуйста рабочим примером загрузки любых контролов в любом месте (простите за тавтологию). Что то никак не выходит разобраться... Например, пытаюсь использовать "в бою" любой контрол из guiControlsLobby.swf: ошибок нет, но и контролов на сцене нет. В лобби все отображается правильно. import net.wg.infrastructure.events.LibraryLoaderEvent; // ------------- App.instance.loaderMgr.loadLibraries(Vector.<String>([ "guiControlsLobby.swf", "guiControlsLobbyBattle.swf", "guiControlsLobbyBattleDynamic.swf", "guiControlsLobbyDynamic.swf", "guiControlsLogin.swf", "guiControlsLoginBattle.swf", "guiControlsLoginBattleDynamic.swf" ])); App.instance.loaderMgr.addEventListener(LibraryLoaderEvent.LOADED_COMPLETED, onLoadedCompleted, false, 0, true); // ------------- private function onLoadedCompleted() : void { // тут код создания, настройки и добавления контрола на сцену } Quote Share this post Link to post Short link Share on other sites
IzeBerg 128 #407686 Posted October 19, 2017 8 часов назад, Steeler сказал: Ребят, поделитесь пожалуйста рабочим примером загрузки любых контролов в любом месте (простите за тавтологию). Что то никак не выходит разобраться... Например, пытаюсь использовать "в бою" любой контрол из guiControlsLobby.swf: ошибок нет, но и контролов на сцене нет. В лобби все отображается правильно. import net.wg.infrastructure.events.LibraryLoaderEvent; // ------------- App.instance.loaderMgr.loadLibraries(Vector.<String>([ "guiControlsLobby.swf", "guiControlsLobbyBattle.swf", "guiControlsLobbyBattleDynamic.swf", "guiControlsLobbyDynamic.swf", "guiControlsLogin.swf", "guiControlsLoginBattle.swf", "guiControlsLoginBattleDynamic.swf" ])); App.instance.loaderMgr.addEventListener(LibraryLoaderEvent.LOADED_COMPLETED, onLoadedCompleted, false, 0, true); // ------------- private function onLoadedCompleted() : void { // тут код создания, настройки и добавления контрола на сцену } Как создаете и добавляете контрол? Quote Share this post Link to post Short link Share on other sites
Steeler 1 #407687 Posted October 19, 2017 11 минуту назад, IzeBerg сказал: Как создаете и добавляете контрол? В лобби все грузится нормально, а в бою пусто... import net.wg.gui.components.advanced.TextAreaSimple; // -------------- var textArea : TextAreaSimple = addChild(App.utils.classFactory.getComponent("TextAreaSimple", TextAreaSimple, { x: 10, y: 10, width: 300, height: 100, showBgForm: true, scrollBar: "ScrollBar", text: "Example TextAreaSimple" })) as TextAreaSimple; Quote Share this post Link to post Short link Share on other sites
Steeler 1 #408525 Posted October 23, 2017 Трудно мне дается AS3, но кажется разобрался с причиной. А суть в том, что классы некоторых контролов находятся только в lobby.swf, и в бою (при загруженной battle.swf) соответственно недоступны, так как флешка ангара выгружена. 1 Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #408564 Posted October 24, 2017 8 hours ago, Steeler said: А суть в том, что классы некоторых контролов находятся только в lobby.swf, и в бою (при загруженной battle.swf) соответственно недоступны, так как флешка ангара выгружена. Так все библиотечные элементы есть в SWC файлах картохи. А содержимое, в плане какие классы там имеются, можно без проблем посмотреть в том же FlashDevelop. Quote Share this post Link to post Short link Share on other sites
alphasave1 4 #410538 Posted November 5, 2017 Hi,I have a question. I want to display Scroll Bar in DropDownMenu. And I want to specify an item from an external file on DropDownMenu. How can I make it work? Here is My Current Code. package { App.instance.loaderMgr.loadLibraries(Vector.<String>([ "guiControlsLobbyBattle.swf" ])); App.utils.classFactory.getComponent("DropdownMenuUI", DropdownMenu); import net.wg.gui.components.controls.DropdownMenu; import net.wg.infrastructure.base.AbstractWindowView; import net.wg.gui.components.controls.SoundButton; import flash.text.*; import scaleform.clik.data.DataProvider; public class Main extends AbstractWindowView { private var soundButtonLoad : SoundButton; private var soundButtonCancel : SoundButton; private var textFieldTest : TextField; private var ddMenu : DropdownMenu; public function Main() { super(); } override protected function onPopulate() : void { super.onPopulate(); width = 600; height = 400; window.title = "Test Window"; var data : Array = new Array(); data.push( { "label":"00_tank_tutorial" } ); data.push( { "label":"01_karelia" } ); data.push( { "label":"02_malinovka" } ); data.push( { "label":"04_himmelsdorf" } ); data.push( { "label":"05_prohorovka" } ); data.push( { "label":"06_ensk" } ); data.push( { "label":"07_lakeville" } ); data.push( { "label":"08_ruinberg" } ); data.push( { "label":"10_hills" } ); data.push( { "label":"11_murovanka" } ); data.push( { "label":"13_erlenberg" } ); data.push( { "label":"14_siegfried_line" } ); data.push( { "label":"17_munchen" } ); data.push( { "label":"18_cliff" } ); data.push( { "label":"19_monastery" } ); data.push( { "label":"22_slough" } ); data.push( { "label":"23_westfield" } ); data.push( { "label":"28_desert" } ); data.push( { "label":"29_el_hallouf" } ); data.push( { "label":"31_airfield" } ); data.push( { "label":"33_fjord" } ); data.push( { "label":"34_redshire" } ); data.push( { "label":"35_steppes" } ); data.push( { "label":"36_fishing_bay" } ); data.push( { "label":"37_caucasus" } ); data.push( { "label":"38_mannerheim_line" } ); data.push( { "label":"44_north_america" } ); data.push( { "label":"45_north_america" } ); data.push( { "label":"47_canada_a" } ); data.push( { "label":"63_tundra" } ); data.push( { "label":"73_asia_korea" } ); data.push( { "label":"83_kharkiv" } ); data.push( { "label":"84_winter" } ); data.push( { "label":"86_himmelsdorf" } ); data.push( { "label":"92_starlingrad" } ); data.push( { "label":"95_lost_city" } ); data.push( { "label":"96_prohorovka_defence" } ); data.push( { "label":"100_thepit" } ); data.push( { "label":"101_dday" } ); data.push( { "label":"103_ruinberg_winter" } ); data.push( { "label":"112_eiffel_tower_ctf" } ); data.push( { "label":"114_czech"} ); data.push( { "label":"120_kharkiv_halloween" } ); data.push( { "label":"212_epic_random_valley" } ); data.push( { "label":"h03_shopfest_2015" } ); data.push( { "label":"hangar_bootcamp" } ); data.push( { "label":"hangar_halloween_v2" } ); data.push( { "label":"hangar_kharkiv_halloween" } ); data.push( { "label":"hangar_premium_v2" } ); data.push({"label":"hangar_v2"}); var dataProv : DataProvider = new DataProvider(data); textFieldTest = new TextField(); textFieldTest.width = 590; textFieldTest.height = 360; textFieldTest.x = 20; textFieldTest.y = 15; textFieldTest.multiline = true; textFieldTest.selectable = false; textFieldTest.defaultTextFormat = new TextFormat("$FieldFont", 20, 0xEA4517); textFieldTest.text = "If You Select Map Name and Push 'Load' Button, it will load Map."; addChild(textFieldTest); ddMenu = addChild(App.utils.classFactory.getComponent("DropdownMenuUI", DropdownMenu, { x: 20, y: 40, width: 200, itemRenderer: "DropDownListItemRendererSound", dropdown: "DropdownMenu_ScrollingList", menuRowCount: dataProv.length, //rowCount:rows, //scrollBar:scrBar, dataProvider: dataProv, selectedIndex: 0 })) as DropdownMenu; soundButtonLoad = addChild(App.utils.classFactory.getComponent("ButtonRed", SoundButton, { width: 100, height: 25, x: 195, y: 365, label: "Load" })) as SoundButton; soundButtonCancel = addChild(App.utils.classFactory.getComponent("ButtonNormal", SoundButton, { width: 100, height: 25, x: 305, y: 365, label: "Cancel" })) as SoundButton; } } } Quote Share this post Link to post Short link Share on other sites