Actionscript 3 如何更改SWC组件';Flash IDE上显示的宽度是多少?
我将库中的项目与.as文件链接。在这个.as文件中,我编写了如下类: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
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组件简单库对象,那个么该库对象将不会在场景中对动作做出反应。如果你真的想要有实时预览的组件,你可以修改它,但是我发现这不是我想要的。我已经编辑了这个问题。