2010-03-25 2 views
-1

Моя анимация продвигается вперед, но она замерзает. Он выбрасывает TypeError 1009. Как мне избавиться от этой ошибки и заставить ее играть?TypeError 1009, XML и AS3

загрузить
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(); 

ОШИБКА

ТипError: Ошибка # 1009: Не удается получить доступ к свойству или методу ссылки на нулевой объект.
at _fla :: MainTimeline/frame1()
ТипError: Ошибка # 1009: Не удается получить доступ к свойству или методу ссылки на нулевой объект.
в _fla :: MainTimeline/incrementCounter()
на flash.utils :: Timer/_timerDispatch()
на flash.utils :: Timer/галочкой()

ответ

2

Вы делаете то же очень просто что вы делали в одном из своих предыдущих вопросов, и это показывает, что вы еще не очень хорошо понимаете, как выполняется ваш код, в каком порядке и т. д. Я прошел через него и избавился от ошибки, но код ничего не делает, кроме отображения некоторых чисел. Я не знаю, если это цель.

Прежде чем вставить код, несколько заметок на вашем. Во-первых, это еще раз ужасно грязный. Я отформатировал его правильно, но я не буду делать это снова с вашим кодом. Это самая легкая вещь в мире, которая хорошо форматирует код, и это действительно облегчает жизнь других людей, пытаясь интерпретировать его. Я действительно настоятельно рекомендую вам начать делать это.

Во-вторых, проблема с вашим кодом и ошибками, которые вы получали, были в результате попыток доступа к содержимому переменных, которые вы еще не установили. Главным виновником был ваш объект myXML, с которым вы пытались получить доступ в incrementCounter до того, как вы даже запустили функцию processXML. Это довольно просто, и вы должны узнать, как выполняется код, чтобы избежать подобных проблем. Кроме того, я бы избегал помещать объявления переменных между функциями, если вы кодируете прямо на временной шкале, может и будет получить ужасно запутанным. Поместите все объявления вверху, затем вызовите некоторую функцию, которая будет работать, и ваши функции будут ниже. Я перестроил ваш код, чтобы отразить этот совет.

Наконец, эти типы ошибок («не могут получить доступ к свойству или методу нулевого» и т. Д.), Как правило, могут быть легко диагностированы с использованием ограниченного отладчика Flash. Запустите «Отладочный фильм» из меню «Отладка» во Flash. Преимущество отладчика заключается в том, что он не только покажет вам ошибку в окне вывода, но и остановится в строке кода, вызвавшей ошибку, чтобы вы могли понять, в чем проблема. Есть даже окно, в котором отображаются все переменные в текущей области, поэтому вы можете видеть, какой из них является нулевым или что-то еще. Используя это, вы могли бы исправить эти ошибки самостоятельно; ТипErrors, подобные этим, обычно не подходит для публикации на форуме. Конечно, если вы действительно застряли, вы должны спросить, но хорошо узнать, как вы можете исправить эти вещи сами по себе, и многие из ваших постов повторяют одни и те же вопросы.

Во всяком случае, что модифицированный код:

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

Спасибо. Теперь я должен понять, почему он не оживляет. Я не знаю, установлены ли значения статически или это так, как разворачиваются события таймера. Я постараюсь уйти от отладочных сообщений, но я ничего не делал. – 2010-03-25 18:47:21

+0

Не думал, что это грязно? Ну, это было два пути! – debu

Смежные вопросы