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

时间:2012-03-26 07:35:26

标签: flash actionscript resize scale

我试图设置一个简单的表单,您可以在其中键入一个引脚并提交它以切换到另一个动画片段。我正在使用Flash CS5和ActionScript 3.我有一些MovieClip可以在RESIZE事件上调整大小。动画片段完全调整到舞台大小,以便填写它。

我遇到的问题是缩放。

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

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

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

我只想保持这些元素的宽度/高度,无论舞台的大小如何。 因此,如果有人调整浏览器的大小,使舞台成为一个更大的玩家,那就像元素现在有更多的空间可供使用,但是他们拥有的空间是相同的,因为一切都被拉伸了。因此,即使在我的全高清视图中显示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”将作为页面,所以我将有更多的动画片段调整大小到舞台大小,以通过使用可见属性在它们之间切换。 但是,每当我调整窗口大小时,影片剪辑中最右上角出现的文本(在舞台上)也会缩放。为什么呢?

1 个答案:

答案 0 :(得分:0)

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

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

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

由于Flash总是扩展一切(无论出于何种原因),我需要相应地重新缩放子元素。因此,如果父MovieClip调整为double大小(因此scale乘以2),则所有子元素都需要将scale属性设置为0.5(因此是一半大小)。 这使子元素的大小相同。

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

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