zoukankan      html  css  js  c++  java
  • 神奇的TextField(2)

    var text_content:TextField=new TextField();
    text_content.autoSize="left"; //
    text_content.width=text_content.width + 1; //
    text_content.x=10; //
    text_content.wordWrap=true; //
    text_content.multiline=true; //
    text_content.text="ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd";
    addChild(text_content);

    上面一段代码,能看出什么问题吗?

    其实运行后,在舞台上是看不到textfield的~

    同样的的一段代码,分部注释每行,再进行调试,

    var text_content:TextField=new TextField();
    text_content.autoSize="left"; //如果单注释这句,text正常显示
    text_content.width=text_content.width + 1; //如果单注释这句,舞台上看不到text
    text_content.x=10; ////如果单注释这句,舞台上看不到text, 如果同时注释width x这两个属性的设置,text又正常显示
    text_content.wordWrap=true; //如果单注释这句,text正常显示
    text_content.multiline=true; //这句注释不注释都没影响
    text_content.text="ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd";
    addChild(text_content);
    trace(text_content.width);

    后面的注释写明了如果把这行注释掉会有什么效果。

    神奇的TextField(1)中,有提过说wordwrap autosize text对width都有决定作用。只是上面的例子都有一个特点就是,在设置wordwrap,autosize text这些属性后,就立即去读取textfield的width~

    而通过这篇文章的例子可以看出,wordwrap autosize text对width都有决定作用,但都不是在设置wordwrap,autosize,text属性的时候就立即修改width属性!!

    而是在获取或设置width属性时,flash通过wordwrap autosize text这些影响因素动态的计算width结果然后返回。

    同样,在设置text的x,y坐标时,也flash也会计算textfield的width!!

    textfield内部有一个字段(姑且称为_width),在获取textfield的width属性时,

    如果需要计算(在wordwarp为false的时候),就进行计算,并用_width保存这个计算结果,之后返回_width,

    如果不需要计算(在wordwarp为true的时候)就直接返回_width属性的值,但这时,_width属性并不是正确的,

    因为在设置wordwrap为true以后,再修改text属性,应该是会导致width发生变化的,但实际上,textfield的width在设置wordwrap为true之后无论text是什么都不会再变了。

    这样子就比较好解释上面的代码,为什么设置了width或者x属性时,stage上的textfield就看不到了。

    因为在设置width或者x属性时,textfield的width就会被动态计算,示例代码中autosize为left,text为空,那么width在计算时就由初始值变成了4,而之后因为设置了wordwrap属性为true,当再设置text的时候,textfield的width并不会发生改变。所以textfield的width就一直是4,stage上就看不到这个textfield了.

    wordwrap这个和类的构造函数有点类似,

    当自定义了类的构造函数,系统不在为你添加默认构造函数了

    当设置了wordwrap为true时,系统就默认你自定义了textfield的width(这个值就是在设置),之后在需要width属性时就不再计算了。

  • 相关阅读:
    CS224n, lec 10, NMT & Seq2Seq Attn
    CS231n笔记 Lecture 11, Detection and Segmentation
    CS231n笔记 Lecture 10, Recurrent Neural Networks
    CS231n笔记 Lecture 9, CNN Architectures
    CS231n笔记 Lecture 8, Deep Learning Software
    CS231n笔记 Lecture 7, Training Neural Networks, Part 2
    pytorch坑点排雷
    Sorry, Ubuntu 17.10 has experienced an internal error
    VSCode配置python插件
    tmux配置与使用
  • 原文地址:https://www.cnblogs.com/tianlanliao/p/3681310.html
Copyright © 2011-2022 走看看