Actionscript 3 ActionScript 3-通过浏览器动态调整电影剪辑大小,但保持比例

Actionscript 3 ActionScript 3-通过浏览器动态调整电影剪辑大小,但保持比例,actionscript-3,dynamic,resize,movieclip,Actionscript 3,Dynamic,Resize,Movieclip,我有一个尺寸为500x400的电影剪辑。实例名为:“main”。我有以下代码: import flash.display.StageScaleMode; import flash.display.StageAlign; import flash.events.Event; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.addEventListener (Event.RESI

我有一个尺寸为500x400的电影剪辑。实例名为:“main”。我有以下代码:

import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.events.Event;

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener (Event.RESIZE, resizeHandler);

// initialize sizing
resizeHandler (null);

function resizeHandler (event:Event):void {
var sw:Number = stage.stageWidth;
var sh:Number = stage.stageHeight;

  main.height = sh;
  main.width = sw;

}

我怎样才能使MovieClip的大小比例和最大尺寸保持在500x400

这段代码应该可以完成这项工作:

if (stage.stageWidth/500 < stage.stageHeight/400)
{
    main.scaleX = stage.stageWidth/500;
    main.scaleY = main.scaleX;
}else{
    main.scaleX = stage.stageHeight/400;
    main.scaleY = main.scaleX;
}
if(stage.stageWidth/500
这是我脑子里想不出来的,所以不是100%正确的语法,但你应该明白:

import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.events.Event;

var ratio:Number = Number(stage.stageWidth)/stage.stageWidth;//you need to check if stage isn't null and this ratio is valid

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener (Event.RESIZE, resizeHandler);


// initialize sizing
resizeHandler (null);

function resizeHandler (event:Event):void {
var sw:Number = stage.stageWidth;
var sh:Number = stage.stageHeight;
  //make with width same as stage
  main.width = sw;
  main.height = sh/ratio;//keep height proprtional
  //or you can try the other way around if you want - make main.height = sh and main.width =  sh * ratio;

}

不管电影剪辑的比例如何,下面的代码都应该执行此操作。如果您希望强制执行500乘以400的比例,您可以将movieClipRatio指定为500/400

import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.events.Event;

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener (Event.RESIZE, resizeHandler);
var movieClipRatio:Number = main.width / main.height;

// initialize sizing
resizeHandler (null);

function resizeHandler (event:Event):void {
    var sw:Number = stage.stageWidth;
    var sh:Number = stage.stageHeight;

    if ( sw == 0 || sh == 0 ) {
        return; // special case to avoid
    }

    var stageRatio:Number = sw / sh;

    if ( stageRatio > movieClipRatio )  {
        // stage is proportionally wider than movieClip
        // resize by height
        main.width *= sh / main.height;
        main.height = sh;
    } else {
        // stage is proportionally taller than movieClip
        // resize by width
        main.height *= sw / main.width;
        main.width = sw;
    }

}

当stage可用时,应该将stageWidth/stageHeight比率存储在一个变量中,然后在resizeHandler中将其重新用于新的维度。简单来说,其他缩放模式可能是handyThanks,但我不知道ActionScript3能不能做到这一点。你的代码也会做同样的事情,就像我的代码一样。比例没有保持住。MovieClip的最大大小不起作用。Flash文档大小为:500x400,发布设置为:HTML-默认比例(全部显示)和100x100%的维度。比例有效!但是如何为MovieClip设置大小限制(500x400)?如果您是MovieClip的尺寸默认为500x400(无缩放),并且希望保持相同的大小,那么为什么要在调整大小处理程序中更改宽度和高度?您是否通过注释掉调整大小处理程序中的这两行来获得所需的行为?我希望对最大大小500x400进行限制。例如,如果我有1920x1200分辨率,我的MovieClip将有1300x1000(近似大小)。我想在浏览器窗口的大小低于分辨率时调整MovieClip和constain比例,并将最大大小设置为500x400。我希望你能理解我想说的话。我希望从一开始就说清楚。试试@Tianzhen Lin的答案,看起来很准确。此外,如果文件大小不是问题,并且您使用的是Flash IDE,那么您可以使用UILoader组件并传递MovieClip的Liinkage id