У меня было несколько идей: от вызова и actionScript-функции из javascript с использованием ExternalInterface до передачи FlashVars в swf, просто чтобы swf узнал размер div, до более простой идеи.
здесь идет.
Имеют 1 мувиклип в качестве фона и 1 мувиклип, содержащий голову.
Я думаю, что вашим лучшим выбором будет вариант «Это флэш-ролик сверху» из вашего примера.
Ваш лучший будет настройка
stage.scaleMode = StageScaleMode.NO_SCALE;
или
stage.scaleMode = StageScaleMode.SHOW_ALL;
Идея заключается в пропорциональном масштабировании контента.
Затем вы добавляете прослушиватель событий для события изменения размера и масштабируете / перерисовываете фон.
stage.addEventListener(Event.RESIZE, stageResizeHandler);
function stageResizeHandler(event:Event = null):void{
//assuming your background is called "background"
background.width = stage.stageWidth;
background.height = stage.stageHeight;
//if content needs recentering, assuming "content" is the name used
content.x = (stage.stageWidth - content.width) * .5;
content.y = (stage.stageHeight - content.height * .5;
}
Я установил значение по умолчанию для аргумента обработчика событий, чтобы вы могли вызывать эту функцию без
отправка события
, например
stageResizeHandler();
вместо
stage.dispatchEvent(new Event(Event.RESIZE));
Возможно, вам придется вызывать эту функцию при инициализации, не уверен.
Также вам необходимо пропорционально изменить размер содержимого в зависимости от размера сцены.
вот код, который я протестировал:
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener(Event.RESIZE, stageResizeHandler);
stageResizeHandler();
function stageResizeHandler(event:Event = null):void{
//resize bg
bg.width = stage.stageWidth;
bg.height = stage.stageHeight;
//scale proportionally
if(content.width > stage.stageWidth || content.height > stage.stageHeight){
var ratio:Number = getRatio(content);
if(stage.stageWidth > stage.stageHeight){
content.height = stage.stageHeight;
content.width = content.height * ratio;
}else
if(stage.stageWidth < stage.stageHeight){
content.width = stage.stageWidth;
content.height = content.width / ratio;
}
}else {
content.scaleX = content.scaleY = 1;
}
//centre
content.x = (stage.stageWidth - content.width) * .5;
content.y = (stage.stageHeight - content.height) * .5;
}
function getRatio(target:MovieClip):Number{
var ratio:Number;
target.width > target.height ? ratio = (target.width / target.height) : ratio = (target.height / target.width);
return ratio;
}
К сожалению, я заметил некоторое мерцание на определенных размерах. Я предполагаю, что масштабирование и тот факт, что соотношение часто меняется в зависимости от того, как вы изменяете размер.