【问题标题】:TypeError 1009, XML and AS3类型错误 1009、XML 和 AS3
【发布时间】:2011-01-31 18:14:00
【问题描述】:

我的动画向前推进,但它被冻结了。它抛出一个 TypeError 1009。我如何摆脱这个错误并让它发挥作用?

下载
http://sandboxfun.weebly.com/

XML

<?xml version="1.0" encoding="utf-8"?>
<SESSION>
 <TIMER TITLE="speed">1000</TIMER>
 <COUNT TITLE="starting position">10000</COUNT>
</SESSION>

FLA

//DynamicText 'Count'
 var timer:Timer = new Timer(10);  
 var count:int = 0;
 var fcount:int = 0; 

timer.addEventListener(TimerEvent.TIMER, incrementCounter);  
 timer.start();  

function incrementCounter(event:TimerEvent) { 
 count = myXML.COUNT.text();
 count++;  
 fcount=int(count*count/1000);
 mytext.text = formatCount(fcount);
 }

function formatCount(i:int):String { 
 var fraction:int = i % 100; 
 var whole:int = i / 100;  

 return ("0000000" + whole).substr(-7, 7) + "." + (fraction < 10 ? "0" + fraction : fraction); 
 } 

//LOAD XML
 var myXML:XML;
 var myLoader:URLLoader = new URLLoader();
 myLoader.load(new URLRequest("time.xml"));
 myLoader.addEventListener(Event.COMPLETE, processXML);
  /*------CHANGED TIMER VALUE WITH XML------*/
  timer = new Timer( Number(myXML.TIMER.text()) );
  //timer.start();

//PARSE XML
function processXML(e:Event):void {
 myXML = new XML(e.target.data);
  trace(myXML.COUNT.text()); 
  trace(myXML.TIMER.text()); 
 }
//var count:int = 0;//give it a value type
 /*------CHANGED COUNT VALUE WITH XML------*/
 count = myXML.COUNT.text();

错误

TypeError:错误 #1009:无法访问 null 的属性或方法 对象引用。
在 _fla::MainTimeline/frame1()
类型错误:错误 #1009:无法访问空对象引用的属性或方法。
在 _fla::MainTimeline/incrementCounter()
在 flash.utils::Timer/_timerDispatch()
在 flash.utils::Timer/tick()

【问题讨论】:

    标签: xml flash actionscript-3


    【解决方案1】:

    您犯了与您在之前的一个问题中所犯的相同的非常简单的错误,这表明您还没有非常清楚地了解代码的执行方式、执行顺序等.我已经通过它并摆脱了错误,但代码除了显示一些数字之外什么也没做。我不知道这是否是目标。

    在我粘贴代码之前,先对您的代码做一些说明。一方面,它又一次非常混乱。我已经正确格式化了它,但我不会再用你的代码这样做了。保持代码格式良好是世界上最简单的事情,并且在尝试解释代码时确实让其他人的生活更轻松。我真的,强烈建议你真正开始这样做。

    其次,您的代码问题以及您遇到的错误是由于尝试访问您尚未设置的变量的内容造成的。罪魁祸首是您的 myXML 对象,您甚至在运行 processXML 函数之前就试图在 incrementCounter 中访问该对象。这是相当基本的,您应该了解代码如何执行以避免类似的问题。另外,如果您直接在时间轴上编码,我会避免在函数之间放置变量声明,这可能会而且 会变得非常混乱。将所有声明放在顶部,然后调用一些可以让事情顺利进行的函数,并将您的函数放在下面。我已重新安排您的代码以反映此建议。

    最后,这些类型的错误(“无法访问 null 的属性或方法”等)通常可以很容易地使用 Flash 的有限调试器进行诊断。从 Flash 中的“调试”菜单运行“调试影片”。调试器的优点是它不仅会在输出窗口中向您显示错误,而且会在导致错误的代码行处停止,因此您可以查看问题所在。甚至还有一个窗口可以显示当前范围内的所有变量,因此您可以看到哪个是空的,或者其他什么。使用它,您可以自己修复这些错误;像这样的 TypeErrors 通常不适合在论坛上发布。当然,如果你真的被卡住了,你应该问,但学习如何自己解决这些问题是件好事,而且你的许多帖子都在重复同样的问题。

    不管怎样,修​​改后的代码:

    //DynamicText 'Count'
    var timer:Timer = new Timer(10);  
    var count:int = 0;
    var fcount:int = 0; 
    
    //LOAD XML
    var myXML:XML;
    var myLoader:URLLoader = new URLLoader();
    myLoader.load(new URLRequest("time.xml"));
    myLoader.addEventListener(Event.COMPLETE, processXML);
    /*------CHANGED TIMER VALUE WITH XML------*/
    //timer.start();
    
    function incrementCounter(event:TimerEvent) 
    { 
        //Before, this function was being called before 
        //you had read in your XML file, so myXML was empty.
        count = myXML.COUNT.text();
        count++;  
        fcount=int(count*count/1000);
        mytext.text = formatCount(fcount);
    }
    
    function formatCount(i:int):String 
    { 
        var fraction:int = i % 100; 
        var whole:int = i / 100;  
    
        return ("0000000" + whole).substr(-7, 7) + "." + (fraction < 10 ? "0" + fraction : fraction); 
    } 
    
    
    //PARSE XML
    function processXML(e:Event):void 
    {
        myXML = new XML(e.target.data);
        trace(myXML.COUNT.text()); 
        trace(myXML.TIMER.text()); 
        count = myXML.COUNT.text();
    
        //I put this here, so that this timer's event will only be 
        //created once myXML is initialised with XML data.
        timer = new Timer( Number(myXML.TIMER.text()) );
        timer.addEventListener(TimerEvent.TIMER, incrementCounter);  
        timer.start();  
    }
    

    【讨论】:

    • 谢谢。现在我必须弄清楚为什么它没有动画。我不知道这些值是静态设置的还是计时器事件展开的方式。我会尽量避免调试帖子,但我并不认为它很乱:)
    • 没想到很乱吧?好吧,没有两种方法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多