![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2014
Сообщений: 4
|
Здравствуйте! Написал код для викторины. Всё работает, вопросы задаются рандомно, но в определённый момент приложение останавливается и выводится следующая ошибка: "TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".at Main/asking() at Main/onClick()". Пробовал её устранить, применял трассировку, но не обнаружил баг. Ко всему прочему, ошибка возникает каждый раз в новом месте: она может появиться как после первого вопроса, так и после десятого или любого другого. Бьюсь уже второй день, не нашёл ответ в поисковике. Вот сам код:
package { import flash.display.*; import flash.events.*; import flash.net.*; import flash.text.*; import TfFormat; public class Main extends Sprite { var externalXML:XML;//загруженный XML var numOfQuestion:Number;//число вопросов var currentXML:XML=new XML;//XML текущего вопрсоа var currentElementText:String='';//текущий вариант ответа var i;// номер текущего вопроса var massiv:Array=[];// массив с ответами var loader:URLLoader = new URLLoader(); var request:URLRequest=new URLRequest("super.xml"); var textF:TfFormat = new TfFormat; var rnd:RND; //экземпляр генератора номера вопроса public function Main() { loader.load(request); loader.addEventListener(Event.COMPLETE, preOnComplete); } /* Функция загрузки XML-файла */ function preOnComplete(event:Event):void { var tf:TextField = new TextField; tf.text = 'Викторина' tf.setTextFormat(textF); var goStart:AnswerBut = new AnswerBut('запуск викторины'); tf.x =30; tf.y =30; tf.width = 300; tf.height = 40; goStart.x = 50; goStart.y = 50; addChild(tf); addChild(goStart); goStart.addEventListener(MouseEvent.CLICK, onComplete); } function onComplete(event:Event):void { if (this.numChildren>1) { while (this.numChildren > 1) { this.removeChildAt(1); } } if (loader!=null) { externalXML=new XML(loader.data); numOfQuestion = externalXML.quest.length(); asking(externalXML.quest.length()+1); //запускаем первый вопрос } } / Функция asking(numOff) отвечает за процесс задачи конкретного вопроса. В параметр функции передается номер предыдущего вопроса, который не должен задаваться повторно. При первом запуске функции этот номер больше длины массива вопросов. / function asking(numOff):void { var currentRandom:Number = numOff; //присваиваем текущему номеру //вопроса предыдущий номер вопроса while(currentRandom == numOff) { currentRandom = Math.round(Math.random()*numOfQuestion); //создаем номер вопроса, не равный //предыдущему номеру } currentXML=externalXML.quest[currentRandom]; //текущий вопрос в виде XML var tf:TextField = new TextField; tf.text = currentXML.@text.toString(); tf.setTextFormat(textF); tf.width = 400; tf.height = 40; tf.x = 20; tf.y = 70; tf.wordWrap = true; addChild(tf); var numMassiv:Array = []; for (var i=0; i<currentXML.answer.length(); i++) { numMassiv[i] = i } var answerMassiv:Array = []; var answerNum = numMassiv.length; for (var k=0; k<answerNum; k++) { var kk = Math.round(Math.random()*(numMassiv.length-1)); answerMassiv[k]=new AnswerBut(currentXML.answer[numMassiv[kk]]); if (numMassiv[kk] == 0) answerMassiv[k].correct = true; answerMassiv[k].num = currentRandom; trace(currentRandom); numMassiv.splice(kk,1); answerMassiv[k].x=30; answerMassiv[k].y=k*20+120; addChild(answerMassiv[k]); answerMassiv[k].addEventListener(MouseEvent.CLICK, onClick); } } function onClick(e:MouseEvent):void { var prev = new Number(e.target.num); //удаляем всех потомков класса if (this.numChildren>1) { while (this.numChildren > 1) { this.removeChildAt(1); } } asking(prev); } } } |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Не вникал особо в код, но есть подозрение, что клик происходит не по
а по его детям, соответственно в обработчике target другой и у него нет num замените на
__________________
Отряд Котовскага |
|
|||||
|
Регистрация: Jul 2014
Сообщений: 4
|
Не получается. Вернее, всё работает, но ошибка не ушла. Но за помощь спасибо!
|
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Запустите в дебагере. Он подскажет сразу, в каком месте происходит ошибка.
__________________
Отряд Котовскага |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:38. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|