Flex: невозможно изменить размер внешнего загруженного содержимого SWF - PullRequest
4 голосов
/ 11 мая 2011

У меня есть приложение, в котором я пытаюсь загрузить внешний SWF.Итак, у нас есть:

  • Мое приложение: Размеры сцены - 768x1280.ScaleMode = EXACT_FIT.
  • Внешний SWF: это еще одно приложение, где его этап: 800x600.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-файл загружен в подходящем положении, и он "кажется" имеет 320x240 затемнения.Но его ширина немного обрезана, так как, если я растяну Flash Player, мне удастся увидеть оставшуюся часть внешнего SWF-файла.Кроме того, размер внешнего SWF-файла никогда не изменяется, хотя я уменьшаю / растягиваю Flash Player.Он всегда остается фиксированным (если я прослеживаю его размеры, я всегда получаю 800x600, хотя я визуально вижу 320x240) - Если я увеличу ширину сцены основного приложения, этот маленький клип исчезнет.

Обсуждение:

Я знаю, что размеры исходного этапа составляют 800, и это больше, чем исходный этап моего приложения (768), но я думаю, что когда я делаю изменение размера, внешние SWF-файлыЭтап должен быть установлен в контейнере.Он установлен, но часть внешнего SWF не видна.Flash Player вспомнил, что ширина внешней SWF-сцены была больше, чем у моего приложения ...

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 11 мая 2011

Не думаю, что проблема в вашем ScaleMode.На флеш-плеер может быть только одна сцена.Свойство «stage» вашего «внешнего» SWF ссылается на «Стадию» вашего «приложения» SWF после его добавления в список отображения.Если SWF-файл загружен и не добавлен в список отображения, свойство «stage» загруженного SWF-файла будет равно «null».Установка шкалы scaleMode внутри вашего внешнего SWF-файла не будет определять, как он будет масштабироваться после загрузки в другой SWF-файл.

Кроме того, вы, вероятно, изменяете размер SWFContainer, а не сам SWF ... вот почему свойства SWF width и height всегда имеют размер 800x600.Я не уверен, что это то, о чем вы просите, но из того, что я понимаю, вам может понадобиться создать слушатель события изменения размера сцены.

0 голосов
/ 12 ноября 2014

Вы пытались использовать эффект масштаба на "External SWF"?

Scale Effect

0 голосов
/ 11 мая 2011

Даже если для scaleContent установлено значение «true», вам все равно необходимо установить точную высоту и ширину для элемента управления SWFLoader, чтобы он даже попытался изменить размер внутреннего SWF-файла. Все, что делает scaleContent, вместо того, чтобы показывать SWF с обычными или растянутыми размерами, он также увеличивает масштаб SWF, если необходимо, и, если не просто, масштабирует его, чтобы сохранить соотношение исходного SWF.

...