![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jul 2012
Сообщений: 4
|
Приветствую форумчане!
В as3(да и вообще в флеше) я почти полный 0 - никогда не приходилось с ней работать. Сейчас возникла необходимость для небольшого личного проектика создать обертку для подгрузки в нее вешнего swf файла. Проблема в следующем - когда я подгружаю этот самый внешний файл он почемто растягиается далеко за видимую область - как итог я вижу на сцене не всю флеш, а только ее евый верхний угол. При этом я уже дня 3 бьюсь над тем как изменить размер этой самой флешки, но ничего не получается. Пробовал создать контейнер типа movieclip и грузить swf туда, а в клипе установить scale, но не помогает, так как подгружаемый файл сам по себе тоже лоадер и он грузит все обьекты непосредственно на сцену. При этом он использует компонент scene для нахождения размеров сцены, но сколько я не писал и не убирал Sequriity.AllowDomain(*) - никаких ошибок флеш не выдает - т.е. то ли он обращается не к той какой то сцене(!?) хотя, насколько я понимаю, она 1 для всех - ведь это то, что указано в html, то ли он к ней не может по каким то причинам обратиться, а ошибок не выдает. Собственно ваопрос в том - как заставить его грузиться в нормальном размере? Ниже приведу код своего лоадера и декомпилированные куски того, как и куда добавляется подгружаемый swf: Мой loader: package { import com.demonsters.debugger.MonsterDebugger; import flash.display.*; import flash.display.Sprite; import flash.events.*; import flash.net.*; import flash.system.*; import flash.text.TextField; public class Connector extends Sprite { private var button:Sprite = new Sprite(); public var loader:Loader; public var container:MovieClip; public var request:URLRequest; public var Disp:DisplayObjectContainer; public var Mov:MovieClip; public var config:XML; public function ButtonInteractivity() { drawButton() button.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); addChild(button); } private function drawButton():void { var textLabel:TextField = new TextField() button.graphics.clear(); button.graphics.beginFill(0xD4D4D4); // grey color button.graphics.drawRoundRect(0, 0, 80, 25, 10, 10); // x, y, width, height, ellipseW, ellipseH button.graphics.endFill(); textLabel.text = "Click Me!"; textLabel.x = 10; textLabel.y = 5; textLabel.selectable = false; button.addChild(textLabel) } private function mouseDownHandler(event:MouseEvent):void { height = 100; width = 100; addChild(loader); } public function Connector() { if(stage != null) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } public var contentheight:int; public var contentwidth:int; private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); ButtonInteractivity(); MonsterDebugger.initialize(this); MonsterDebugger.trace(this,this.loaderInfo.loaderURL); stage.addEventListener( Event.ENTER_FRAME, this._onUpdate ); loader = new Loader(); root.scaleX = 0.3; root.scaleY = 0.3; request = new URLRequest("/Loading.swf"); loader.load(request); } private function _onUpdate( e:Event ):void { MonsterDebugger.trace(this,"sc"); //вообще не помогает - кнопка остается уменьшенной, но объекты, добавленные подгруженным лоадером - нет stage.scaleX = 0.3; stage.scaleY = 0.3; } } } stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.EXACT_FIT; StageReferance.setup(stage); package com.pickgliss.toplevel { import flash.display.*; import flash.events.*; final public class StageReferance extends Object { public static var stageHeight:int; public static var stageWidth:int; private static var _stage:Stage; public function StageReferance() { return; }// end function public static function setup(param1:Stage) : void { if (_stage != null) { return; } _stage = param1; _stage.addEventListener(Event.EXIT_FRAME, __onNextFrame); _stage.addEventListener(Event.RESIZE, __onResize); _stage.stageFocusRect = false; return; }// end function private static function __onNextFrame(event:Event) : void { if (_stage.stageWidth > 0) { _stage.removeEventListener(Event.EXIT_FRAME, __onNextFrame); stageWidth = _stage.stageWidth; stageHeight = _stage.stageHeight; } return; }// end function private static function __onResize(event:Event) : void { stageWidth = _stage.stageWidth; stageHeight = _stage.stageHeight; return; }// end function public static function get stage() : Stage { return _stage; }// end function } } Буду очень благодарен за помощь! Бьюсь уже 3 дня и ничего пока что не выходит. Спасибо. |
|
|||||
|
Цитата:
на это: и перенести этой в init самой обертки |
|
|||||
|
Регистрация: Jul 2012
Сообщений: 4
|
Извиняюсь, забыл уточнить - исходный код подгружаемой флешки я изменять не могу - только мою обертку....
|
|
|||||
|
Единственное, что могу предположить. Нужно добавить к загруженной флешке слушатель
, и, после того как она добавится, подождать еще один кадр, и снова, уже в своей обертке вызвать
Иначе подгруженная флешка так и будет все время менять масштабирование сцены. |
|
|||||
|
Регистрация: Jul 2012
Сообщений: 4
|
Спасибо за помощь!
Я сделал немного по другому - переписал инициализацию подгруженной флешки абстрактно внутри своего лоадера, так что теперь я могу менять эти параметры. и да - он действительно при нерастяжении по сцене дает иенно этот эффект - не растягивает и все ок. но не надо, чтобы при растяжении флешка менялась в размерах. т.е. мне нужен именно ExactFit. от что я заметил - если я в дебагере проверяю размеры сцены, то они почемуто равны 0(что ширина, что высота)... Я так понимаю мне имеет смысл копать именно в этом направлении? Когда создавался проект я создавал проект ActionScript 3 - правильно ли я сделал? и почему при вызове stage.heignt и stage.width мне возвращаются 0? вот как я обращался к сцене: stage.align = StageAlign.TOP; stage.scaleMode = StageScaleMode.EXACT_FIT; MonsterDebugger.trace(this, stage.width);//передаю ширину в дебагер - показывает 0 MonsterDebugger.trace(this, stage.height);//передаю высоту в дебагер - показывает 0 StageReferance = ApplicationDomain.currentDomain.getDefinition("com.pickgliss.toplevel.StageReferance"); StageReferance.setup(stage); при этом в функции обьявления класса я использую: public function BBLoader() { if (stage) { this.init(); } else { addEventListener(Event.ADDED_TO_STAGE, this.init); } return; } Upd stage.stageweight и stage.stageheight почемуто выдают 500, хотя должны быть 1000 ширина и 600 высота |
|
|||||
|
Цитата:
это вернет видимые габариты сцены. Тогда как stage.width и stage.height возвращают ее ширину с учетом того, что на ней находится. Если в какой-то момент там ничего нет, то вернет нули. |
|
|||||
|
Регистрация: Jul 2012
Сообщений: 4
|
Ага - это я понял - я там внизу написал маленький upd как раз на эту тему - сцена почему то при trace возвращает мне что ширину что длину для свойств именно stage.stagewidth и stage.stageheight равную 500, хотя должна быть 1000 на 600...
при этом когда инициализируется приложение - то получается, что сцена не меньше, а больше идимой области. т.е. если я ставлю например stage.align = StageAlign.TOP;, то она располагает флешку не по центру видимой области, а правее... как будто какойто марджин или чтото подобное стоит. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|