2011-10-20 57 views
0

我是使用Flash的新手,我試圖使用flash cs5和as3創建多類型問答遊戲。在遊戲中,內容或數據被寫入一個xml文件。如何解決此問題:TypeError:錯誤#1009:無法訪問空對象引用的屬性或方法

我遇到了一系列的問題,我覺得有點難以知道可以使用什麼解決方案。

  1. 我有一個可變QNO。 qno用於確定程序將要調用的問題的數量。在我的遊戲中,我需要輸出5個問題。如果qno達到5,程序應該調用將顯示記分牌的下一幀。我的問題是,qno不增加。這個問題會影響我的第三個問題,我會稍後說明。 我已經想通了,這是導致問題的錯誤:TypeError: Error #1009: Cannot access a property or method of a null object reference.我該如何解決這個問題?

  2. 解決^^(動態文本引起的問題,受影響的問題,現在choices.but固定 我已經說過,我打電話的問題,並在XML文件中的選擇。該計劃是調用的代碼,但我也遇到一個問題。它不顯示完整的問題和選擇。我的意思的是,例如,問題是,如何鳥只吃?當你運行程序時,它輸出怎麼做b它與選項一樣,它沒有顯示完整的問題和選擇

  3. 這還不是那麼重要,但它是關於得分。我不知道程序是否增加了正確和錯誤的答案變量。但它已經有了一個代碼。我知道在處理這個問題之前我必須先解決第一個問題。


這是代碼集,我使用

這是用於呼叫,其位於框架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(); 

的XML文件中的代碼這是問題所在的主要代碼

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

我希望有人能幫我解決我的問題,或者是什麼導致問題以這種方式行事。

回答

0

學習測試&調試,當你在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!!!'); 

等等

希望這有助於!

+0

我已經檢查過代碼並重新輸入了它。我發現引起程序的真正問題是增量函數。 qno,不會增加 – Rovy

+0

TypeError:錯誤#1009:無法訪問空對象引用的屬性或方法。 \t at quiz_fla :: MainTimeline/change_question() \t at quiz_fla :: MainTimeline/ButtonAction1() – Rovy

+0

這只是表示您試圖訪問尚未實例化或具有空值的對象...可能是由「tick」或「cross」造成的 – PatrickS

相關問題