Ich hatte mehrere Ideen, die von Aufruf und Actionscript-Funktion von Javascript mit ExternalInterface ging, um FlashVars an die swf nur damit die swf wissen, was die Größe des div ist, um eine einfache Idee.
los geht's.
Sie haben 1 MovieClip als Hintergrund und 1 MoveClip mit dem Kopf.
Ich denke, das Beste wäre die Option "Dies ist der Flash-Film oben" aus Ihrem Beispiel. Am besten wird die Einstellung
stage.scaleMode = StageScaleMode.NO_SCALE;
o
stage.scaleMode = StageScaleMode.SHOW_ALL;
Die Idee ist, den Inhalt proportional zu skalieren.
Dann würden Sie einen Ereignis-Listener für das Größenänderungsereignis hinzufügen und den Hintergrund skalieren/neu zeichnen.
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;
}
Ich habe einen Standardwert für das Argument des Ereignishandlers festgelegt, so dass Sie die Funktion auch ohne diese Funktion aufrufen können. ein Ereignis auszulösen
z.B..
stageResizeHandler();
anstelle von
stage.dispatchEvent(new Event(Event.RESIZE));
Möglicherweise müssen Sie diese Funktion beim Initialisieren aufrufen, ich bin mir nicht sicher.
Außerdem müssen Sie die Größe des Inhalts je nach Größe der Bühne proportional anpassen. Hier ist also ein Code, den ich getestet habe:
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;
}
Leider habe ich bei bestimmten Größen ein gewisses Flackern festgestellt. Ich vermute, dass die Skalierung und die Tatsache, dass das Verhältnis ändert sich oft je nachdem, wie Sie die Größe ändern.