代码之家  ›  专栏  ›  技术社区  ›  anon255058

类型错误1009,XML和AS3

  •  -1
  • anon255058  · 技术社区  · 16 年前

    我的动画是向前推进的,但它被冻结了。它抛出一个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:error 1009:无法访问null的属性或方法 对象引用。
    在fla::MainTimeline/Frame1()
    typeerror:error 1009:无法访问空对象引用的属性或方法。
    在 _ fla::主时间线/递增计数器()
    在flash.utils::timer/_timerdispatch()
    在 flash.utils::计时器/tick()

    1 回复  |  直到 8 年前
        1
  •  2
  •   debu    16 年前

    你犯了同样的错误,你在前面的问题中犯了同样的错误,这表明你对代码的执行方式、顺序等还没有很好的把握。我已经经历过了,并且排除了错误,但是代码除了散开一些数字。我不知道这是不是目标。

    在我粘贴代码之前,请在你的代码上加上一些注释。首先,它是 再一次 一团糟。我已经正确地格式化了,但是我不会再用你的代码那样做了。保持代码的良好格式是世界上最简单的事情,当试图解释代码时,它确实使其他人的生活更容易。我真的强烈建议你开始做这个。

    第二,代码的问题和错误是由于试图访问尚未设置的变量的内容造成的。罪魁祸首是myxml对象,在运行processxml函数之前,您试图在incrementcounter中访问它。这是相当基本的,您应该学习如何执行代码,以避免类似的问题。另外,如果直接在时间轴上编码,我将避免在函数之间放置变量声明,它可以 将 弄糊涂了。把所有的声明放在顶部,然后调用一些函数,使事情顺利进行,并将您的函数放在下面。我重新排列了你的代码以反映这个建议。

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

    无论如何,修改后的代码:

    //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();  
    }