Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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 getTextFormat().size从时间轴返回的值与从类返回的值不同_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 getTextFormat().size从时间轴返回的值与从类返回的值不同

Actionscript 3 getTextFormat().size从时间轴返回的值与从类返回的值不同,actionscript-3,flash,Actionscript 3,Flash,我在Flash CS5中从事AS3项目。我有一个名为aiMoneyText的动态文本字段,当我尝试获得它的字体大小时: root["aiMoneyText"].getTextFormat().size 我得到null。该代码位于从textfield所在框架中的Actions窗格调用的类中。我将root传递给构造函数中的那个类。奇怪的是,如果我将这行代码直接放在操作窗格中,而不是放在类中,它将返回正确的值 发生什么事了?这行代码的位置如何影响其输出 链接到.fla: 课程: (文件类别) 我

我在Flash CS5中从事AS3项目。我有一个名为
aiMoneyText
的动态文本字段,当我尝试获得它的字体大小时:

root["aiMoneyText"].getTextFormat().size
我得到
null
。该代码位于从textfield所在框架中的Actions窗格调用的类中。我将
root
传递给构造函数中的那个类。奇怪的是,如果我将这行代码直接放在操作窗格中,而不是放在类中,它将返回正确的值

发生什么事了?这行代码的位置如何影响其输出

链接到.fla:

课程:

  • (文件类别)

我建议为您的fla创建一个文档类。创建一个电影剪辑类,并将类名添加到属性面板的“类”字段中,同时选择文档。在fla中未选择任何内容时,将显示文档

文档类随后将充当时间轴脚本,因为它会自动添加到显示列表中,您可以将添加的\u to \u阶段事件侦听器添加到文档类构造函数中。这还允许您直接从文档类引用textField,而不是使用“root”,这是一个坏主意


然后,您的文本字段应该在“添加到”阶段处理程序和文档类的所有后续帧中可用。

如前所述,解决方案要求在包含文本的字段上显式设置
TextFormat
。由于没有为文本属性设置文本,运行时没有使用设置的属性创建可用的
TextFormat
对象
size

查看代码后,请注意以下几点:

  • 请记住,在实例化一个新对象时,如果您计划使用它,则需要保留对它的引用,否则它将被创建,失去作用域,并准备进行垃圾收集

    (即-
    新游戏(此)
    ,需要一个参考…-
    var myGame:Game=新游戏(此);

  • DisplayObject
    DisplayObject
    扩展类时,创建名为
    root
    的类级变量时要小心,因为它已经有一个名为
    root
    的继承引用


祝你好运

我现在意识到这可能是因为代码是在TextField被添加到stage之前被调用的。有什么办法吗?从时间轴的根返回主时间轴。我认为您应该首先验证传递给构造函数的根不是null。其次,如果它不为null,请验证它是否是正确的根目录(MainTimeline是您要查找的,听起来像什么?但根目录将根据您使用它的位置而有所不同)。最后,如果这不起作用,您可能需要使用MovieClip(root).aiMoneyText。如果你想在将根添加到stage之后使用它,在构造函数中创建一个added_to_stage事件,该事件将在添加后运行,然后你可以访问根。我可能会在答案中列出所有这些,但我想我会先从你那里听到文本字段的位置(timeline或其他未被偶然添加到显示列表中的类)@BennetYeates我应该将事件侦听器添加到哪个对象?我尝试将其添加到textfield,但似乎不起作用(事件从不触发)。添加到\u阶段仅对DisplayObjects有用。因此,如果您有一个扩展DisplayObject的类(Sprite、MovieClip等)包含TextField的,您可以添加到该类,而不是TextField对象。谢谢,我已经忘记了所有文档类。但是,即使进行了此更改,我仍然从文本格式中获取null,即使在myDocumentClass.OnAddedStatage处理程序中也是如此。您是否检查了是否可以访问“aiMoneyText”在其他方面,如设置其.text?或检查其是否在显示列表中?您没有使用root,是吗?