【问题标题】:ActionScript 3 buttons and links from XML来自 XML 的 ActionScript 3 按钮和链接
【发布时间】:2015-08-04 23:47:39
【问题描述】:

我通过 ActionScript 3.0 成功地将一个具有粗略结构的远程 XML 文档拉入到 Flash CC 中

AS3 的样子:

import flash.events.Event;
import flash.net.URLLoader;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.navigateToURL;

var myXML: XML = new XML();
var myXMLList:XMLList = new XMLList;
var XML_URL: String = "http://dirtymitten.org/xmlbuttons.xml";
var myXMLURL: URLRequest = new URLRequest(XML_URL);
var myLoader: URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener(Event.COMPLETE, xmlLoaded);


function xmlLoaded(event: Event): void {

    myXML = XML(myLoader.data);
    trace("data loaded");

    var i:int = 1;
    var number_txt:String;
    for each (var node in myXML.Listing)
    {
        number_txt = "button number " + i.toString();
        trace(node.Title);
        trace(node.Url);
        trace( number_txt );
        i++;
    }

}

跟踪语句按预期工作,迭代也工作。

我未能完成的是能够让 MovieClip 实例继承这些值。我有一个名为 MyButton 的库对象,其中包含动态文本字段 title_txt 和 count_txt。当我更改我的 for each 循环以实例化一个新的 MyButton 实例时,我得到了一些错误:

...
for each (var node in myXML.Listing)
    {
        var myButton:MyButton = new MyButton();
        myButton.title_txt.text = node.Title;
        myButton.count_txt.text = i.toString();
        myButton.url = node.Url;
        number_txt = "button number " + i.toString();
        trace(node.Title);
        trace(node.Url);
        trace( number_txt );
        i++;
    }
...

我的错误是 Scene 1, Layer 'actions', Frame 1, Line 27, Column 22 1119: Access of possibly undefined property text through a reference with static type String. 和第 28 行的另一个错误,它们对应于:

myButton.title_txt.text = node.Title;
myButton.count_txt.text = i.toString();

意味着文本属性不支持开箱即用,或者我没有访问 MovieClip 对象,而是自定义类 MyButton 中不存在的 title_txt 属性。我以为在与 Library 对象名称匹配的类中设置属性会相互对应,但事实并非如此。

在库对象 MyButton 中,我有 title_txt 和 count_txt 的动态文本字段,我想用 XML 填充它们。

MyButton.as 类定义是一个单独的文件,其构建方式如下:

package  {

    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.net.URLRequest;
    import flash.net.navigateToURL;


    public class MyButton extends MovieClip {

        // constructor code
        public var url:String;
        public var title_txt:String;
        public var count_txt:String;

        public function MyButton(){
            this.addEventListener(MouseEvent.CLICK, clickHandler);
        }

        private function clickHandler(e:MouseEvent):void{
            if (!url) return;
            navigateToURL(new URLRequest(url), "_blank");
        }
    }

}

我没有明确包含该文件,因为它是自行生成的,然后在稍后进行编辑,所以我认为它已绑定到 Library MovieClip 并且不需要显式导入 MyButton.as。它是 xml button.fla 项目的目标,所以我假设它是隐式绑定的。

假设 XML 加载干净并且我想使用的 MovieClip 存在自定义类,我如何生成带有 XML 派生标签和 URL 的按钮?

【问题讨论】:

  • 验证文本字段的名称,因为根据编译器title_txt 和count_txt 是两个字符串。
  • 如果你有MyButton的类文件,请出示代码。如果您将 .as 文件链接到库资产,则必须确保类路径(在库对象导出中用于操作脚本设置)指向该文件。

标签: xml actionscript-3 flash


【解决方案1】:

我有一个名为 MyButton 的库对象,其中包含动态文本字段 title_txt 和 count_txt。

不,你没有。您有一个具有上述名称的字符串变量的类:

public class MyButton extends MovieClip {
        public var url:String;
        public var title_txt:String; //THIS IS A STRING, NOT A TEXTFIELD!!!
        public var count_txt:String;

但字符串不是文本字段。就像苹果不是橙子一样。

如果你想拥有 TextFields,你应该相应地键入你的变量。

【讨论】:

  • 好的,很棒的提示。这似乎是我缺少的知识。
猜你喜欢
  • 2011-06-15
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多