GPCracker Posted July 11, 2017 Share Posted July 11, 2017 Помогите с компонентом UILoaderAlt.Интуиция мне подсказывает, что это какой-то специфичный компонент. А UILoader не пробовал? @ Quote Link to comment Short link Share on other sites More sharing options...
Tester Posted July 11, 2017 Share Posted July 11, 2017 (edited) Интуиция мне подсказывает, что это какой-то специфичный компонент. А UILoader не пробовал? Мой косяк... Нужно было отключить сохранение пропорций (maintainAspectRatio), он ведь включен по умолчанию. Правда при включенном остается проблема искажения, так как по умолчанию ставится размер 27х17 и соответственно от него устанавливаются пропорции. Странно, что после загрузки разрабы не обновляют переменные с оригинальными размерами. Edited July 11, 2017 by Tester @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted July 11, 2017 Share Posted July 11, 2017 Странно, что после загрузки разрабы не обновляют переменные с оригинальными размерами.Ничего странного, это картошка. @ Quote Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted July 11, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
CyToTV Posted September 20, 2017 Share Posted September 20, 2017 Ребят, как создать такой же компонент @ Quote Link to comment Short link Share on other sites More sharing options...
IzeBerg Posted September 20, 2017 Share Posted September 20, 2017 Ребят, как создать такой же компонент FieldSet @ Quote Link to comment Short link Share on other sites More sharing options...
CyToTV Posted September 20, 2017 Share Posted September 20, 2017 FieldSet пример можно, если не сложно? @ Quote Link to comment Short link Share on other sites More sharing options...
IzeBerg Posted September 20, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
CyToTV Posted September 24, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
IzeBerg Posted September 24, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
CyToTV Posted September 24, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
John_Nash Posted September 27, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted September 27, 2017 Share Posted September 27, 2017 Только что, John_Nash сказал: Кажется, пример mod_TestWindow.py с первой страницы не работает. Ничего не менял, окно в ангаре не создаётся. В лог питона вылетает ошибка Ну клиент игры то обновляется же, а примеры нет. Функцию loadView изменили в 0.9.20. @ Quote Link to comment Short link Share on other sites More sharing options...
John_Nash Posted September 27, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
Steeler Posted October 18, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
IzeBerg Posted October 19, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
Steeler Posted October 19, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
Steeler Posted October 23, 2017 Share Posted October 23, 2017 Трудно мне дается AS3, но кажется разобрался с причиной. А суть в том, что классы некоторых контролов находятся только в lobby.swf, и в бою (при загруженной battle.swf) соответственно недоступны, так как флешка ангара выгружена. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted October 24, 2017 Share Posted October 24, 2017 8 hours ago, Steeler said: А суть в том, что классы некоторых контролов находятся только в lobby.swf, и в бою (при загруженной battle.swf) соответственно недоступны, так как флешка ангара выгружена. Так все библиотечные элементы есть в SWC файлах картохи. А содержимое, в плане какие классы там имеются, можно без проблем посмотреть в том же FlashDevelop. @ Quote Link to comment Short link Share on other sites More sharing options...
alphasave1 Posted November 5, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.