2014-03-31 150 views
0
package { 

import Scripts.Grid 

public class Pathfinding { 

    private var $xmlLoader:URLLoader = new URLLoader(); 
    $xmlLoader.addEventListener(Event.COMPLETE, loadXML); 
    $xmlLoader.load(new URLRequest("grid.xml")); 
    public static var DepStation:String = new String; 
    public static var ArrStation:String = new String; 

    public function Pathfinding() { 
     // constructor code 
    } 
    public function loadXML(e:Event):void 
    { 
     var $xml:XML = new XML(e.target.data); 

     var $grid:Grid = new Grid(); 
     $grid.parseXML($xml); 
     trace($grid.findPath(DepStation, ArrStation)); 
    } 

} 

}AS3 XML加载脚本

嗨,我在这里的问题是,Flash将输出一个错误

第16行1046:类型未找到或不是编译时常:事件。

,当我试图导入对象类型:flash.events.Event,这些错误会爆炸,产生

9号线1120:未定义的属性$ xmlLoader的访问。

第9行1120:访问未定义的属性loadXML。

第10行1120:访问未定义的属性$ xmlLoader。

第10行1180:调用一个可能未定义的方法URLRequest。

第8行1046:类型未找到或不是编译时常量:URLLoader。

第8行1180:调用一个可能未定义的方法URLLoader。

第8行1180:调用一个可能未定义的方法URLLoader。

所以我真的在我的智慧的结尾,脚本的来源是http://lassieadventurestudio.wordpress.com/2008/12/09/a-star-pathfinding/ 它以前工作,如果我复制它1:1,但现在即使1:1克隆不工作,适应外部动作脚本不起作用。

很多帮助表示赞赏

+0

首先,您缺少一些[imports](http://www.adobe.com/devnet/actionscript/learning/as3-fundamentals/packages.html#articlecontentAdobe_numberedheader_0),例如'import flash.events。 *'。除了仅用于方法的变量声明(使用初始化)之外,您不能在类级别编写代码。 – Cameron

回答

1

这是它应该如何工作

package { 

import Scripts.Grid; 
import flash.events.Event; 

public class Pathfinding { 

private var $xmlLoader:URLLoader; 
public static var DepStation:String = new String(); 
public static var ArrStation:String = new String(); 

public function Pathfinding() { 
    // constructor code 
    $xmlLoader = new URLLoader(); 
    $xmlLoader.addEventListener(Event.COMPLETE, loadXML); 
    $xmlLoader.load(new URLRequest("grid.xml")); 
} 
public function loadXML(e:Event):void 
{ 
    var $xml:XML = new XML(e.target.data); 

    var $grid:Grid = new Grid(); 
    $grid.parseXML($xml); 
    trace($grid.findPath(DepStation, ArrStation)); 
} 

}

所以,你有一对夫妇的问题,

1)如果你创建了一个String对象通过做“new String()”,你需要包含(),就像你创建的其他对象一样。

2)你需要输入你要使用的东西,即事件类从闪存

3)不能使用在类级别,这意味着像“的addEventListener方法(methods或相似。 ..)“或”load(...)“应该在构造函数中,或者在另一个方法中。

为什么他们在教程中这样写呢?你可能会问。那么,在教程中,这个人明确地说将这段代码放到你的时间线上(在Flash PRO中)。时间轴编码和面向对象编码在编写它们的方式上有很大不同。

+0

感谢您的帮助!还有flash.net.URLLoader和flash.net.URLRequest的导入语句。非常感谢您的帮助! – josh

+0

@Josh - 你可以通过接受和/或upvoting正确的答案来显示你的感激之情。 –