Как исправить это: TypeError: Ошибка № 1009: Невозможно получить доступ к свойству или методу ссылки на пустой объект - PullRequest
0 голосов
/ 20 октября 2011

Я новичок в использовании флэш, и я пытаюсь создать игру для викторины с несколькими типами, используя flash cs5 и as3. в игре содержимое или данные записываются в XML-файл.

Я сталкиваюсь с рядом проблем, и мне сложно понять, какое решение можно использовать.

  1. у меня есть переменная qno . qno используется для определения количества вопросов, которые будут заданы программой. в моей игре мне нужно вывести 5 вопросов. если qno достигает 5, программа должна вызвать следующий кадр, который покажет табло. моя проблема в том, что qno не увеличивается. эта проблема затрагивает мою третью проблему, о которой я расскажу позже. Я понял, что это ошибка, которая вызвала проблему: TypeError: Error #1009: Cannot access a property or method of a null object reference. Как мне это исправить?

  2. решено ^^, (динамический текст вызвал эту проблему, которая затрагивала вопросы и выбор. Но теперь исправлена ​​ Я уже сказал, что я вызываю вопрос и выбор в XML-файле. программа вызывает код, но у меня возникла одна проблема. не показывает полный вопрос и варианты . что я имел в виду, например, вопрос: как едят птицы? когда вы запускаете программу, она выдает только как работает b это идет так же, как выбор. он не показывает полный вопрос и варианты.

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


это набор кодов, который я использую

это код, используемый для вызова XML-файла, который находится в кадре 1

 var questions:Array=new Array(); 
 var answers:Array=new Array(); 
 var loader:URLLoader = new URLLoader();
 loader.addEventListener(Event.COMPLETE, loadXML);
 loader.load(new URLRequest("sample.xml"));
 function loadXML(e:Event):void 
 { 
var myxml = new XML(e.target.data);
var loop =myxml.ques.length();
for (var i=0;i<loop;i++)
{
    questions[i]=myxml.ques[i].q1;
    answers[i]=[myxml.ques[i].op1,myxml.ques[i].op2,myxml.ques[i].op3];
}
gotoAndPlay(2);
 }
 stop();

это основной код, в котором находится проблема

 var qno=0;
 var rnd1; 
 var rnd2;
 tick.visible=false;
 cross.visible=false;
 var right_answers=0;
 var wrong_answers=0;
 function change_question()
 {
if(tick.visible)
{
    right_answers++;
}
if(cross.visible)
{
    wrong_answers++;
}
if(qno==1)
{
    gotoAndPlay(3);
}
else
{
    tick.visible=false;
    cross.visible=false;
    rnd1=Math.ceil(Math.random()*3);
    rnd2=Math.ceil(Math.random()*questions.length)-1;
    q.text=questions[rnd2];
    if(questions[rnd2]=="x")
    {   
        change_question();
    }
    questions[rnd2]="x";
    enable_disable(1);
    if(rnd1==1)
    {
        opt1.text=answers[rnd2][0];
        opt2.text=answers[rnd2][1];
        opt3.text=answers[rnd2][2];
    } 
    if(rnd1==2)
    {
        opt1.text=answers[rnd2][2];
        opt2.text=answers[rnd2][0];
        opt3.text=answers[rnd2][1];
    } 
    if(rnd1==3)
    {
        opt1.text=answers[rnd2][1];
        opt2.text=answers[rnd2][2];
        opt3.text=answers[rnd2][0];
    } 
}
 }
 function enable_disable(a)
 { 
if(a==0)
{
    shade1.mouseEnabled=false;
    shade2.mouseEnabled=false;
    shade3.mouseEnabled=false;
} 
if(a==1)
{
    shade1.mouseEnabled=true;
    shade2.mouseEnabled=true;
    shade3.mouseEnabled=true;
}
 }
 change_question();
 next_b.addEventListener(MouseEvent.CLICK, ButtonAction1);
 function ButtonAction1(eventObject:MouseEvent) 
 {
qno++;
change_question();
 } 
 shade1.addEventListener(MouseEvent.CLICK, ButtonAction2); 
 shade2.addEventListener(MouseEvent.CLICK, ButtonAction3); 
 shade3.addEventListener(MouseEvent.CLICK, ButtonAction4); 
 function ButtonAction2(eventObject:MouseEvent)
 {
enable_disable(0);
if(rnd1==1)
{
    tick.visible=true;
    tick.y=shade1.y;
}
else
{
    cross.visible=true;
    cross.y=shade1.y;
}
 }
 function ButtonAction3(eventObject:MouseEvent)
 {
enable_disable(0);
if(rnd1==2)
{
    tick.visible=true;
    tick.y=shade2.y;
}
else
{
    cross.visible=true;
    cross.y=shade2.y;
}
 }
 function ButtonAction4(eventObject:MouseEvent)
 {
enable_disable(0);
if(rnd1==3)
{
    tick.visible=true;
    tick.y=shade3.y;
}
else
{
    cross.visible=true;
    cross.y=shade3.y;
}
 }
 stop();

Я надеюсь, что кто-то может помочь мне решить мою проблему или то, что заставляет проблему действовать таким образом.

1 Ответ

0 голосов
/ 20 октября 2011

Обучение тестированию и отладке необходимо при разработке в ActionScript 3 (или на любом другом языке).

Поскольку вы новичок во Flash, переходите на шаг за шагом.Когда вы создаете новую функцию, сначала протестируйте ее, убедитесь, что она возвращает ожидаемый результат, а затем продолжайте.

Она должна быть такой же базовой, как и эта:

function init():void
{
      trace('the init function was called, hooray! ;)');
}

Также,AS3 является строго типизированным языком, поэтому убедитесь, что ваши переменные набраны

 //for example
 var myxml:XML = new XML(e.target.data);

Перед вызовом цикла убедитесь, что у вас есть значение!

 var loop:int =myxml.ques.length();
 if ( loop > 0 )
     trace("loop =" , loop );
 else
     trace('loop = 0, i will not increment!!!');

и т. Д.

Надеюсь, это поможет!

...