Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何更改SWC组件';Flash IDE上显示的宽度是多少?_Actionscript 3_Flash_Movieclip_Swc - Fatal编程技术网

Actionscript 3 如何更改SWC组件';Flash IDE上显示的宽度是多少?

Actionscript 3 如何更改SWC组件';Flash IDE上显示的宽度是多少?,actionscript-3,flash,movieclip,swc,Actionscript 3,Flash,Movieclip,Swc,我将库中的项目与.as文件链接。在这个.as文件中,我编写了如下类: public class TextArea extends MovieClip { ....... public function setWidth(w:Number):void { this.width = w; } } 然后我在库中将该项更改为Compliated clip in library(它与***SWC*)***。我将其添加到stage并更改其属性以启动set

我将库中的项目与.as文件链接。在这个.as文件中,我编写了如下类:

public class TextArea extends MovieClip 
{
    .......
    public function setWidth(w:Number):void
    {
         this.width = w;
    }
}
然后我在库中将该项更改为Compliated clip in library(它与***SWC*)***。我将其添加到stage并更改其属性以启动setWidth函数。但是宽度不会更改。我应该如何更改电影剪辑的宽度

另外,此项中的子项(文本字段)可以更改宽度

在图中,我在舞台上放置了一个SWC组件,SWC只有一个文本字段作为子字段

文本字段为黑色边框,选择SWC,蓝色边框为其边界

我在文本中打印
此.width
,宽度自动更改以调整文本字段。

但蓝色边框是我想要更改的。它显示在Flash面板上,代表变换边界,如下所示:

public class TextArea extends MovieClip 
{
    .......
    public function setWidth(w:Number):void
    {
         this.width = w;
    }
}

所以,我在更改孩子们的数据方面没有任何困难。现在我发现这门课是这样的:

public class TextArea extends MovieClip 
{
    .......
    public function setWidth(w:Number):void
    {
         this.width = w;
    }
}

有一个LivePreviewParent作为
this.parent
。它提供了我的swc在舞台上的实时预览。我更改的大小完全改变了,但我认为蓝色边框代表了LivePreviewParent的边框


然而,更改LivePreviewParent的大小等于更改组件的大小,而不是蓝色的大小。这个类是多么奇怪啊所以我想知道蓝色的实际上是LivePreviewParent的边框?如果是,如何更改它?

您必须更改“this”相对于某物的宽度。最有可能的事情是它的容器。因此,假设您的
TextArea
类在
Main
类中被实例化为
Main
中的“TextArea”,您可以这样写:
TextArea.width=500
我不知道,您的组件是如何构建的,您应该有内部逻辑来调整子组件/子组件的大小

通用解决方案,每个孩子的盲调整大小:

public function setWidth(w:Number):void
{
    var i: uint, len: uint = this.numChildren, child: DisplayObject;

    for(i; i < len; ++i){
        this.getChildAt(i).width = w;
    }

}
简单的文本字段容器,带有背景和自定义填充:

import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;

public class TextContainer extends Sprite {
    private var _textField:TextField;
    private var _padding:int;

    public function TextContainer(text:String, format:TextFormat, padding:int = 4) {
        _padding = padding;
        _textField = new TextField();
        _textField.defaultTextFormat = format;
        _textField.autoSize = TextFieldAutoSize.LEFT;
        _textField.multiline = true;
        _textField.wordWrap = true;
        _textField.text = text;

        addChild(_textField);

        _textField.x = _textField.y = padding;

        //Default width
        setWidth(100);
    }

    public function setWidth(value:Number):void {
        _textField.width = value;

        graphics.clear();
        graphics.beginFill(0xF0F0F0);
        graphics.drawRect(0, 0, _textField.width + 2*_padding, _textField.height + 2*_padding);
    }
}
用法:

var textContainer: TextContainer = new TextContainer("Some text here for test, more text, for multi-line test and resize", new TextFormat("Arial"));
desiredContainer.addChild(textContainer);
textContainer.setWidth(200);

最后我发现flashide和SWC中的AS代码之间有一道不可逾越的墙。无法从SWC访问IDE的数据。

setWitdh
中,您总是设置500。不应该是
this.width=w?@taskino或者默认值是100,现在我设置了500,仍然是100。我发现
这个。宽度改变了,但我放在舞台上的实例的宽度没有改变。是的,我不知道他的电影剪辑有多复杂;)我的MovieClip非常简单,它只有一个文本字段作为孩子。我将MC与AS链接,并将其编写为SWC。我可以通过
this.textIns.width
this.width
更改TextField的宽度。width
也会自动更改。但是,我放在舞台上的SWC组件不会更改我在Flash面板上看到的宽度。我添加了相同文本容器的示例,但带有背景和填充。为什么要在Flash IDE中使用组件?实例化它,放在任何你想要的地方。Flash IDE并没有提供聪明的工具来调整组件的大小以纪念他们的孩子。@NicolasSiver图形总是我想要的,但问题是我的SWC组件在Flash IDE中的选择范围不正确。而且Flash IDE面板上显示的大小也不正确。我想要更改的数字与MC的宽度无关。所以我编辑了这个问题。你说的SWC组件是什么意思?我认为,您误解了Flash IDE工作原理的主要思想。若使用ActionScript导出设置调用SWC组件简单库对象,那个么该库对象将不会在场景中对动作做出反应。如果你真的想要有实时预览的组件,你可以修改它,但是我发现这不是我想要的。我已经编辑了这个问题。