舞台调整大小并获得正确的变量

Eth*_*ick 3 flash stage actionscript-3

在我的Flash应用程序(AS3)中,我想获得舞台大小并使用它,以便我的对象(用户控制的)不能超出屏幕.但是,当我使用时:

stage.stageWidth;
stage.stageHeight;
Run Code Online (Sandbox Code Playgroud)

我得到的价值实际上并不是我想要的.它们给了我舞台大小,但如果我调整窗口大小,数字也会改变.现在,在一个html页面中,我认为这不重要,因为用户无法调整它...但是,我希望它比依赖窗口大小更加坚固.我也试过用:

stage.width;
stage.height;
Run Code Online (Sandbox Code Playgroud)

然而,那些给了我"801"和"601",比我的实际舞台大小更大.当我调整窗口大小时,这些值没有改变,但它们更大.

所以我的问题是,无论窗口大小调整为800乘600,我怎样才能获得舞台大小?(或许隐藏在这个问题中的是,"为什么我会得到801和601?"和"我可以阻止人们调整窗口大小吗?")P!谢谢!

sbe*_*rry 9

首先,了解它们之间的区别非常重要 stage.stageHeight - stage.stageWidth and stage.height - stage.width

stage.stageHeight // The real height of the stage
stage.height // The height of the content on the stage
Run Code Online (Sandbox Code Playgroud)

因此,你得到801和601的原因是因为舞台上总内容的高度和宽度是801 x 601.

现在,为了调整大小问题.如果要在Web浏览器中显示此内容,则可以设置影片的高度和宽度.设置为800和600,而不是100%和100%.现在,无论用户调整浏览器窗口大小,您的电影都将始终保持相同的大小.

如果你想在你的html标记中允许height ="100%"和width ="100%",那么你有两个选项.

  1. 制作一个将充当伪舞台的MovieClip.它将是800 x 600.而不是向舞台添加内容,将它们添加到此MovieClip(比如称为myStage).现在,将对象保留在舞台内的所有逻辑都应用于myStage MovieClip.

  2. 您可以将常量放在AS3代码中.例如:


 public const STAGE_WIDTH:int = 800;
 public const STAGE_HEIGHT:int = 600;
Run Code Online (Sandbox Code Playgroud)

现在,您只需使用这些值而不是stage.stageHeight和stage.stageWidth值.当然,你需要确保也包括在内

stage.align = StageAlign.TOP_LEFT;  // or StageAlign.TOP
stage.scaleMode = StageScaleMode.NO_SCALE;
Run Code Online (Sandbox Code Playgroud)