as3 文本字段错误还是啥?

Posted

技术标签:

【中文标题】as3 文本字段错误还是啥?【英文标题】:as3 textfield bug or what?as3 文本字段错误还是什么? 【发布时间】:2014-04-06 05:53:04 【问题描述】:

我想不出在 Flash 中处理动态文本字段的简单问题。我已经没有脑细胞了,我放弃了..

var g = ['text dang', 'text deng', 'dong', 'laah', 'maah'];

for(var q = 0; q < g.length; q++)
   var p = new grad_plate();
   p.name_field.multiline = false;
   p.name_field.wordWrap = false;
   p.name_field.autoSize = TextFieldAutoSize.LEFT;
   p.name_field.text = g[q];
   p.name_field.width = p.name_field.textWidth;
   p.plate_mc.width = p.name_field.width + 20;
   p.width = p.plate_mc.width;
   p.name = "name_" + q;
   stage.addChild(p);
   //p.x =  q * stage.getChildAt(q).width;
   //p.x = q * p.width;
   p.x =  q * 200;

我的 grad_plate() 类包含 name_field 文本字段和 plate_mc 作为背景。

我想根据实例的宽度动态设置每个实例的 x。

给 200(修复)正在工作,但我想动态获取 p.width 这给我一个丑陋的水平对齐。

【问题讨论】:

我在想,在将东西添加到舞台后,您的布局代码可能会在下一帧中更好地工作(也许然后正确计算 textWidth 或您想要混乱的任何东西,这只是一个猜测我希望它有所帮助,意思是在将事物添加到舞台后使用 settimeOut 之类的东西调用布局/设置代码) 【参考方案1】:

我认为某些部分对您有用。

package 

    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.text.TextFormat;

    public class *** extends Sprite 
        public function ***() 
            addEventListener(Event.ADDED_TO_STAGE, onAdded);
        

        private function onAdded(e:Event):void 
            removeEventListener(Event.ADDED_TO_STAGE, onAdded);

            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;

            setup();
        

        private function setup():void 
            var texts:Array = ["some", "text", "here", "dynamic"];
            var i:uint, len:uint = texts.length, posX:uint, plate:Plate;
            var textFormat: TextFormat = new TextFormat("Arial", 18, 0xFFFFFF, true);

            for (i; i < len; ++i) 
                plate = new Plate(texts[i], textFormat, Math.random() * 0xFFFFFF);
                addChild(plate);
                plate.x = posX;
                posX += plate.width;
            
        
    


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

internal class Plate extends Sprite 

    public function Plate(text:String, textFormat:TextFormat, color:uint) 
        const padding:int = 20;
        var textField:TextField = new TextField();
        var g:Graphics = this.graphics;
        textField.autoSize = TextFieldAutoSize.LEFT;
        textField.defaultTextFormat = textFormat;
        textField.multiline = false;
        textField.wordWrap = false;
        textField.text = text;

        addChild(textField);

        textField.x = textField.y = padding;
        g.beginFill(color);
        g.drawRect(0, 0, 2 * padding + textField.width, 2 * padding + textField.height);
    

结果,看起来像这样:

【讨论】:

这就是答案!在发表评论之前,我在我的项目中实现了你的答案,它确实有效。特别是 plate.x = posX; posX += plate.width;谢谢楼主!

以上是关于as3 文本字段错误还是啥?的主要内容,如果未能解决你的问题,请参考以下文章

自动检测AS3中输入文本字段的值

AS3里【TextField】于【TextArea】有啥区别?

textfield不会清楚,as3

php Array into AS3 first variable null error ,其他变量都正常。有啥想法吗?错误 #2007

AS3:一个非系统的 XML 加载错误

as3 文本字段更改字符串值