【问题标题】:AS3 flash CC I want to set the width of the parent Movieclip of a TextfieldAS3 flash CC 我想设置一个Textfield的父Movieclip的宽度
【发布时间】:2013-07-31 09:48:02
【问题描述】:

我已经动态创建了一堆文本字段,其数量取决于 xml 输入。文本字段需要启用按钮,所以我认为最简单的解决方案是将它们放在一个movieclip 和buttonMode 那个movieclip 中。

层次结构如下所示:main(扩展 MovieClip)-> klankoefening(一个 MovieClip)-> Textfieldparent(一个 MovieClip)-> Textfield

我有一个变量 ma​​xw 包含最大的文本字段宽度,我希望我所有的 Textfieldparents 都具有这个宽度。

我正在尝试这样做:

//generate textfields
keuzes = new XMLList(lijstOpties.categorie.(@cat == catname));
var nrs:int = keuzes.keuze.length(); //aantal keuzemogelijkheden
var maxw:int = 0; //grootste breedte tf, nodig voor bepalen breedte knoppen

for (var nr:int = 0; nr < nrs; nr++) { 
    var tf:TextField = createTextfield(werkfmt);
    tf.text = keuzes.keuze[nr].toString();
    tf.autoSize = "center";
    tf.background = true;
    tf.backgroundColor = 0xffcc33;
    tf.border = true;
    tf.borderColor = 0x000000;
    tf.name = "keuzetf";
    tf.selectable = false;
    tf.x = 0;
    tf.y = 0;

    if (tf.width > maxw) {maxw = tf.width;}

    var tfcontainer:MovieClip = new MovieClip();
    tfcontainer.buttonMode = true;
    tfcontainer.name = keuzes.keuze[nr].toString();
    tfcontainer.addChild(tf);

    klankoefening.addChildAt(tfcontainer,nr);
}

for (var an:int = 0; an < 3; an++) {
    var mcs:MovieClip = klankoefening.getChildAt(an) as MovieClip;
    mcs.width = maxw;
    trace ("mcs " + mcs.width);

    var mtf:TextField = mcs.getChildAt(0) as TextField;
            trace ("mtf " + mtf.text);
}

跟踪结果是

mcs 32.05
mcs 33
mcs 21.25

我觉得奇怪,因为我在第二个循环中声明所有 Textfieldparents 的宽度都应该设置为 ma​​xw。发生了什么?

【问题讨论】:

  • 如果您在将按钮添加到影片剪辑后设置按钮的宽度,您将在其按钮内拉伸 TextField。

标签: actionscript-3 flash movieclip flash-cs6 displayobject


【解决方案1】:

考虑绘制具有所需宽度和高度的底层Rectangle。你可以使用mcs.graphics 来做到这一点。诀窍是,DisplayObjectContainer 的宽度是一个计算属性,更改它可能会导致更改比例。比如说,一个 MC 有两种形状作为儿童,一个在 (1000,0),另一个在 (0,0),宽度都是 10 - 该 MC 的结果宽度将是 1010。所以,而不是改变宽度,通过在 MC 上绘制一个矩形来模拟其变化。

mcs.graphics.clear();
mcs.graphics.lineStyle(0,0,0);
mcs.graphics.beginFill(0x808080,0); // bogus filled rect, to capture events
mcs.graphics.drawRect(0,0,maxw,maxh); // height is needed too
mcs.graphics.endFill();

【讨论】:

    【解决方案2】:

    在对您的问题进行了更多思考之后,我认为您的问题是您添加文本的按钮具有完全由 TextField 定义的宽度,并且因为您将文本设置为 autoSize,所以它正在回弹到原来的宽度。

    你需要做的是让宽度更能代表你的需要,并允许轻松点击按钮,在 tfContainer mc 中创建一个透明矩形,设置 tfContainer 的宽度,然后添加文本到按钮。

    【讨论】:

    • 我尝试关闭 autoSize,但没有任何区别。因为 Vespers 的回答更详细一点,所以我接受了(并无耻地复制了代码)感谢您的帮助!
    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 2014-07-29
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多