#apache-flex #actionscript-3 #flash
#apache-гибкий #actionscript-3 #flash #изменить размер #swfloader
Вопрос:
У меня есть приложение, в котором я пытаюсь загрузить внешний SWF-файл. Итак, мы имеем:
- Мое приложение: Размеры сцены составляют 768×1280. scaleMode = EXACT_FIT.
- Внешний SWF: Это другое приложение, где его размер равен: 800×600. scaleMode = EXACT_FIT.
Проблема в том, что внешний SWF-файл не изменяет свой размер, хотя я применяю «scaleX, scaleY», изменяю его ширину и так далее. Я также пытался вставить его в контейнер Canvas (например, «Как изменить размер внешнего SWF-файла, чтобы он поместился в контейнер?»), но это не решило мою проблему. Интересный фрагмент кода заключается в том, что внешний SWF-файл загружается моим приложением:
private function onLoadedApp( evt:Event ):void{
stage.scaleMode = StageScaleMode.EXACT_FIT;
trace("Loading Application..");
var loaderInfo:LoaderInfo = evt.target as LoaderInfo;
loaderInfo.removeEventListener( Event.COMPLETE, onLoadedApp);
trace(loaderInfo.loader.content);
var swfApplication:SpriteUIComponent = new SpriteUIComponent(evt.target.loader.content );
if( SWFContainer.width < swfApplication.explicitWidth ){
var coef:Number = SWFContainer.width/swfApplication.explicitWidth;
swfApplication.scaleX = coef;
swfApplication.scaleY = swfApplication.scaleX;
}
SWFContainer.addElement(swfApplication);
}
Я также пытался сделать это через SWFLoader, но содержимое external.swf не изменяет свой первоначальный размер, хотя я добавляю параметр «scaleContent».
Визуальные результаты, которые я получил:
Внешний SWF-файл загружен в подходящую позицию, и «кажется», что он имеет размер 320×240. Но его ширина немного обрезана, поскольку, если я растяну Flash Player, я смогу увидеть остальную часть внешнего SWF-файла. Кроме того, внешний SWF-файл никогда не изменяется, хотя я сжимаю / растягиваю Flash Player. Он всегда остается фиксированным (если я отслеживаю его размеры, я всегда получаю 800×600, хотя визуально вижу 320×240) — Если я увеличу ширину рабочей области основного приложения, этот маленький клип исчезнет.
Обсуждение:
Я знаю, что размеры исходного этапа равны 800, и это больше, чем исходный этап моего приложения (768), но я думаю, что при изменении размера внешний этап SWF-файла должен быть помещен в контейнер. Он установлен, но часть внешнего SWF-файла не видна. Как будто Flash Player вспомнил, что ширина внешней SWF-страницы была больше, чем у моего приложения…
Заранее спасибо.
Комментарии:
1. Я только что изменил описание с помощью фрагмента кода. Спасибо.
2. Привет! Вы нашли решение проблемы? В настоящее время у меня точно такая же проблема:)
Ответ №1:
Даже если для параметра scaleContent установлено значение «true», вам все равно нужно задать точную высоту и ширину элементу управления SWFLoader, чтобы он даже попытался изменить размер внутреннего SWF-файла. Все, что делает scaleContent, это вместо отображения SWF-файла в обычном или растянутом размере, он также увеличивает SWF-файл, если это необходимо, а если нет, то просто масштабирует его, чтобы сохранить соотношение исходного SWF-файла.
Комментарии:
1. Да, но это не работает: <mx:SWFLoader x =»64″ y = «291» width = «640» height = «480» scaleContent=»true» source=»external.swf»/>
2. Попробуйте использовать MaxWidth и maxHeight.
Ответ №2:
Я не думаю, что проблема в вашем scaleMode. Для каждого проигрывателя Flash может быть только один этап. Свойство «stage» вашего «внешнего» SWF-файла ссылается на этап вашего SWF-файла «application» после его добавления в список отображения. Если SWF загружен и не добавлен в список отображения, свойство загруженного SWF ‘stage’ будет равно ‘null’. Установка scaleMode этапа внутри вашего внешнего SWF-файла не будет определять, как он масштабируется после загрузки в другой SWF-файл.
Кроме того, вы, вероятно, изменяете размер SWFContainer, а не самого SWF-файла … вот почему свойства ширины и высоты SWF-файла всегда равны 800×600. Я не уверен, что это то, о чем вы просите, но, насколько я понимаю, вам может потребоваться создать прослушиватель событий изменения размера сцены.
Комментарии:
1. Хорошо, но как я могу получить доступ к изменению размера внешнего SWF-файла напрямую? Я использовал Canvas, SWFLoader… О событии изменения размера. Я думаю, что это событие отправляется Flash Player, когда его окно изменяет свой размер, и у меня есть StageScaleMode.NO_SCALE , но я все еще не знаю, как выполнить изменение размера. Я попробую какой-нибудь подход на этом пути. Спасибо.
Ответ №3:
Вы пытались использовать эффект масштабирования для «Внешнего SWF»?