actionscript-3 - as3 获取已调整大小的父级 MovieClip 中子级的宽度/高度

标签 actionscript-3 scale movieclip

我需要在调整大小的父级中获取调整大小的子级的宽度和高度。我有一个 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 + "";

这是一个屏幕截图: enter image description here

我还提供了下面的完整代码。 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是您的比例因子,您必须使用内部的剪辑。检查此图像:

Stack Overflow parent scale problem

左边第一个是我的常规设置 - 影片剪辑(名为 main ),100x100,里面有另一个影片剪辑(名为 second )。

我复制了这个,并设置 scaleXscaleY为 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/

相关文章:

android - 旋转二维图像onclick android

css - 如何缩放和旋转圆形搜索按钮?

actionscript-3 - 如何在动态创建的 Flash 舞台上获取 MovieClip 的名称?

actionscript-3 - as3 播放一次影片剪辑

flash - 如何使用 ActionScript 2用 'circle'绘制 'dynamic angle'?

actionscript-3 - 为什么默认的 spark 按钮皮肤没有 iconDisplay 标签?

actionscript-3 - RIFF header ,但不是 ActionScript 中的WAV错误

actionscript-3 - AS3 : How to convert a Vector to an Array

apache-flex - 如何在 Adob​​e FLEX 中创建 "Browse for folder"对话框?

c# - 使用 C# 从 Mettler Toledo (IND560) 秤设备读取数据