即使设置了NO_SCALE,Flash仍会缩放元素



我试图建立一个简单的表单,在那里你可以键入一个pin并提交它以切换到另一个movieclip。我正在使用Flash CS5和ActionScript 3。我有一些电影剪辑在RESIZE事件中被调整了大小。电影胶片的大小被完美地调整为舞台的大小,所以他们填满了它。

我的问题是缩放。

为了避免缩放所有内容,我使用了以下两行。

stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

我看到舞台在左上角。但是,如果我调整浏览器甚至flash预览的大小(在Adobe flash中CTRL+Enter),所有元素(如文本框、标签和按钮)都会按比例调整大小。

无论舞台有多大,我只想保持这些element的宽度/高度。因此,如果有人调整浏览器的大小,使舞台变得更大,就好像元素现在有更多的空间可以使用,但它们的空间是一样的,因为一切都被拉伸了。因此,即使SWF显示在我的全高清视图中,元素的总像素仍然只有550x400像素,因为这是基于属性设置的flash文档的默认大小。

有人能帮忙解决这个问题吗?因为我想在下一个屏幕上加载图像。因此,如果浏览器的宽度是1000像素,我会得到大约10张图像。但是,如果浏览器因为用户刚刚点击浏览器窗口的"最大化"按钮而调整为2000像素,那么很明显,我的flash文档应该连续打印20张图像,因为现在还有1000像素的空间。你知道我的意思吗?

提前谢谢。

编辑:只是为了更清楚。我开始了一个新的flash项目,试图重现这个问题,只是为了确保它不是因为糟糕的代码。

我创建了一个新的FLA项目。添加了一个简单的矩形,将其转换为MovieClip,并将其实例命名为"mc"。然后我为actionscript部分创建了第二层。我添加了以下代码:

import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.text.*;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener(Event.RESIZE, resizeListener);
function resizeListener (e:Event):void {
  mc.width = stage.stageWidth;
  mc.height = stage.stageHeight;
  mc.x = 0;
  mc.y = 0;
}
var myText:TextField = new TextField();
myText.text = "This is my new text...";
mc.addChild( myText);

就是这样。调整大小很好,这就是我想要的,因为movieclip"mc"将充当页面,所以我将有更多的movieclips调整到舞台大小,以便使用visible属性在它们之间切换。但每次我调整窗口大小时,出现在电影剪辑左上角的文本(在舞台上也是如此)仍然会缩放。为什么?

找到一个解决方案。但我对此并不满意。

我需要在父movieClip中添加一个事件侦听器。每次调用函数时,我都需要为MovieClip中的每个子元素调用这两行。

myText.scaleX = 1 / mc.scaleX;
myText.scaleY = 1 / mc.scaleY;

由于Flash总是缩放所有内容(无论出于何种原因),我需要相应地重新缩放子元素。因此,如果父MovieClip的大小是原来的两倍(因此缩放倍数为2),那么所有子元素的缩放属性都需要设置为0.5(因此是一半大小)。这样可以保持子元素的大小相同。

老实说,这是一个糟糕的解决方案。这意味着每当父MovieClip调整大小时,我需要更新所有子元素。

请不要告诉我这是唯一的解决方案……:-(

最新更新