Гибкий: невозможно изменить размер содержимого внешнего загруженного SWF-файла

#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»?

Эффект масштабирования