我需要在调整大小的父级中获取调整大小的子级的宽度和高度。我有一个 1080 x 612 的图像。我将其放入名为“stackoverflowLOGO”的 MovieClip 中。这就是我需要的子宽度/高度,它位于一个名为 stackOne 的类中。
我的舞台设置为 500 # 700 首先,我调整 stackOne 的大小并检查宽度和高度,它们会显示出正确的值。这可以在图 #1 中看到。这是获取这些值的代码
stackOne = new stackoverflowClass();
stackOne.width = screenX;
stackOne.scaleY = stackOne.scaleX;
addChild(stackOne);
// Width was 1080 and is now 500
stackOne.imageWidth.text = "" + stackOne.width + "";
// Height was 1920 and is now 283.35
stackOne.imageHeight.text = "" + stackOne.height + "";
但是,当我检查已缩放的父级内部 MovieClip 的高度时。值不会改变。 我真的需要知道如何获取缩放后的 MovieClip 中子元素的实际大小。
下面的代码用于检查缩放后的影片剪辑中子元素的宽度/高度。 这是代码中不起作用的部分。
stackTwo = new stackoverflowClass();
stackTwo.width = screenX;
stackTwo.scaleY = stackTwo.scaleX;
addChild(stackTwo);
// Was 1080 and still is 1080 even tho the size has been scaled.
stackTwo.imageWidth.text = "" + stackTwo.stackoverflowLOGO.width + "";
// Was 1920 and still is 1920 even tho the size has been scaled.
stackTwo.imageHeight.text = "" + stackTwo.stackoverflowLOGO.height + "";
这是一个屏幕截图:
我还提供了下面的完整代码。 Here is a zip file of the fla and the two classes used.
这是 MainStack 类中的完整代码:
package
{
import flash.display.MovieClip;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.system.Capabilities;
import stackoverflowClass;
public class MainStack extends MovieClip
{
public var screenX:int;
public var screenY:int;
public var stackOne:stackoverflowClass;
public var stackTwo:stackoverflowClass;
public function MainStack()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
screenX = stage.fullScreenWidth;
screenY = stage.fullScreenHeight;
firstStack();
secondStack();
}
public function firstStack()
{
stackOne = new stackoverflowClass();
stackOne.width = screenX;
stackOne.scaleY = stackOne.scaleX;
addChild(stackOne);
stackOne.imageWidth.text = "" + stackOne.width + "";
stackOne.imageHeight.text = "" + stackOne.height + "";
}
public function secondStack()
{
stackTwo = new stackoverflowClass();
stackTwo.width = screenX;
stackTwo.scaleY = stackTwo.scaleX;
addChild(stackTwo);
stackTwo.imageWidth.text = "" + stackTwo.stackoverflowLOGO.width + "";
stackTwo.imageHeight.text = "" + stackTwo.stackoverflowLOGO.height + "";
stackTwo.y = stackOne.height;
}
}
}
最佳答案
现在一切都清楚了 - 您想知道 DisplayObject 在缩放的 DisplayObject 内部的大小:)
所以这是非常简单的解决方案..父级的scaleX和scaleY是您的比例因子,您必须使用内部的剪辑。检查此图像:
左边第一个是我的常规设置 - 影片剪辑(名为 main
),100x100,里面有另一个影片剪辑(名为 second
)。
我复制了这个,并设置 scaleX
和scaleY
为 2。我跟踪了修改前后的宽度 - 它是 100,然后是 200。
正如您所看到的,内部影片剪辑 ( second
) 是两倍大,但它的宽度又是 50。这是正常的,因为在它自己的空间中,它仍然那么大。
然后我简单地将其宽度除以父级的比例( /=
实际上是 scaleX = scaleX / main.scaleX
)。
然后第二个正方形保持完全相同的大小,并且它的宽度更改为 25
,因为它除以 2
- scaleX
parent 的。
所以你应该开始与 parent 的 scaleX
一起工作和scaleY
并对所有内容进行除法或乘法 - 位置、大小、所有内容。
如果您需要知道子级的实际显示宽度( second
),则只需使用:
trace (main2.second.width * main2.scaleX); // child's width * parent's scaleX
- .width 将为您提供常规的、未更改的宽度
- .width * scaleX (MULTIPLY) 将为您提供实际的VISIBLE宽度(在屏幕上)
- .width/scaleX (DIVIDE) 将放弃缩放并为您提供新值,您可以使用该新值使子级保持相同的可见强>宽度
希望能够解决这个问题。
关于actionscript-3 - as3 获取已调整大小的父级 MovieClip 中子级的宽度/高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23555108/