![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2013
Сообщений: 40
|
Вечер добрэ.
Вот так, у меня выглядит внешний прелоадер: Первый кадр: import flash.events.*; import flash.system.Security; import flash.system.LoaderContext; var ldr:Loader = new Loader(); var url:String = loaderInfo.parameters.path; Security.allowDomain("*"); Security.loadPolicyFile("crossdomain.xml"); var ldrContext:LoaderContext = new LoaderContext(true); if(url!=null) { ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,swf_loaded); ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, swf_error); ldr.load(new URLRequest(url),ldrContext); } function swf_error(e:Event):void { removeEventListener(Event.COMPLETE,swf_loaded); } function swf_loaded(e:Event):void { nextFrame(); } stop(); ldr.x = (stage.stageWidth - ldr.width)/2; ldr.y = (stage.stageHeight - ldr.height)/2; addChild(ldr); Вопрос. Как узнать точную ширину и высоту загруженного объекта(его рабочей области)? |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 497
|
Вроде бы Loader.contentLoaderInfo.width и Loader.contentLoaderInfo.height.
|
|
|||||
|
Регистрация: Jan 2013
Сообщений: 40
|
Цитата:
|
|
|||||
|
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
import flash.display.Loader; import flash.net.URLRequest; import flash.events.Event; var ldr:Loader = new Loader(); var url:URLRequest = new URLRequest("test1.swf"); ldr.contentLoaderInfo.addEventListener(Event.COMPLETE ,completeListener); ldr.load(url); addChild(ldr); function completeListener(e:Event):void { ldr.content.width = 300; // или e.target.content.width = 300; ldr.content.height = 400; trace(ldr.content.width + " пикселей");//300 пикселей trace(ldr.content.height + " пикселей");//400 пикселей } |
|
|||||
|
Регистрация: Jan 2013
Сообщений: 40
|
Проделал этот фокус у себя. Итог такой:
trace(ldr.content.width) // возвращает 150 пикселей trace(ldr.content.height); // возвращает 150 пикселей Следующий вариант хорош, он возвращает то, что как раз и нужно, но он доступен только для чтения: Каким же способом можно установить новые значения ширины/высоты рабочей области загруженной flash'ки? |
|
|||||
|
Регистрация: Jan 2013
Сообщений: 126
|
А не пробовали изменять размер в контейнере? думаю это и есть выход
|
|
|||||
|
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
Исходник можете выложить?Двух файлов.
Добавлено через 1 час 39 минут Попробуйте так import flash.display.Loader; import flash.net.URLRequest; import flash.events.Event; import flash.display.MovieClip; var ldr:Loader = new Loader(); var url:URLRequest = new URLRequest("test1.swf"); ldr.contentLoaderInfo.addEventListener(Event.COMPLETE ,completeListener); var loadMovieSwf:MovieClip; ldr.load(url); function completeListener(e:Event):void { loadMovieSwf = e.target.content; loadMovieSwf.addEventListener(Event.ADDED_TO_STAGE, addEvListener); addChild(loadMovieSwf); } function addEvListener(e:Event):void { loadMovieSwf.removeEventListener(Event.ADDED_TO_STAGE, addEvListener); loadMovieSwf.width = 300; loadMovieSwf.height = 400; } |
|
|||||
|
Регистрация: Jan 2013
Сообщений: 40
|
Цитата:
Цитата:
Первый кадр: import flash.events.*; import flash.system.Security; import flash.system.LoaderContext; import flash.display.Loader; import flash.net.URLRequest; var ldr:Loader = new Loader(); var url:String = loaderInfo.parameters.path; Security.allowDomain("*"); Security.loadPolicyFile("crossdomain.xml"); var ldrContext:LoaderContext = new LoaderContext(true); if(url==null) { // на это не обращайте внимание. поставил для эксперимента ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,swf_loaded); ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, swf_error); ldr.load(new URLRequest("c:/test1.swf"),ldrContext); } function swf_error(e:Event):void { removeEventListener(Event.COMPLETE,swf_loaded); } function swf_loaded(e:Event):void { nextFrame(); } stop(); stage.scaleMode = "noBorder"; var delitel = 0; var movikWidth = ldr.contentLoaderInfo.width; var movikHeight = ldr.contentLoaderInfo.height; trace(movikWidth); trace(movikHeight); trace("-"); trace(ldr.width); trace(ldr.height); if(movikWidth >= movikHeight) { if(movikWidth/movikHeight >= stage.stageWidth/stage.stageHeight) { delitel = stage.stageHeight/movikHeight; ldr.width = movikWidth*delitel; ldr.height = movikHeight*delitel; } else { delitel = stage.stageWidth/movikWidth; ldr.width = movikWidth*delitel; ldr.height = movikHeight*delitel; } } else { delitel = movikWidth/stage.stageWidth; ldr.width = movikWidth/delitel; ldr.height = movikHeight/delitel; } ldr.x = (stage.stageWidth - movikWidth)/2; ldr.y = (stage.stageHeight - movikHeight)/2; addChild(ldr); |
|
|||||
|
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
Поставьте во второй кадр и протестируйте
stage.scaleMode = "noBorder"; var delitel = 0; var movikWidth = ldr.contentLoaderInfo.width; var movikHeight = ldr.contentLoaderInfo.height; trace(movikWidth); trace(movikHeight); trace("-"); if(movikWidth >= movikHeight) { if(movikWidth/movikHeight >= stage.stageWidth/stage.stageHeight) { delitel = stage.stageHeight/movikHeight; ldr.content.width = movikWidth*delitel; ldr.content.height = movikHeight*delitel; } else { delitel = stage.stageWidth/movikWidth; ldr.content.width = movikWidth*delitel; ldr.content.height = movikHeight*delitel; } } else { delitel = movikWidth/stage.stageWidth; ldr.content.width = movikWidth/delitel; ldr.content.height = movikHeight/delitel; } ldr.x = (stage.stageWidth - movikWidth)/2; ldr.y = (stage.stageHeight - movikHeight)/2; addChild(ldr); trace(ldr.width); trace(ldr.height); |
|
|||||
|
Регистрация: Jan 2013
Сообщений: 40
|
belv. По идее работает и у меня. Но зря вы переместили trace() в конец. Попробуйте вставить его обратно и посмотреть, правильные ли размеры возвращаются. И сами убедитесь.
Файл который я скинул test1.swf имеет размер рабочей области 330х250. В его сцене имеется всего лишь один объект(закрашеный синим цветом прямоугольник) размером в 150x150 пикселов. В итоге. Когда мы пытаемся загрузить этот файл в прелоадер выходит следующее: trace(ldr.content.width); // показывает 150 вместо 330 пикселов trace(ldr.content.height); // показывает 150 вместо 250 пикселов Вставьте trace(ldr.width) и trace(ldr.height) в то место, где они стоят у меня в коде и посмотрите результат. Добавлено через 21 минуту В моём случае, получается так, что ldr.width и ldr.height меняют не размер рабочей области загруженной flash'ки, а тот прямоугольник расположенный в нём.. Вот в чём загвоздка. Последний раз редактировалось StasHappy; 04.07.2013 в 20:16. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:37. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|