2011-10-20 9 views
0

私はフラッシュを使用することで新しいです。フラッシュcs5とas3を使用して複数タイプのクイズゲームを作成しようとしています。ゲームでは、コンテンツまたはデータがxmlファイルに書き込まれます。解決方法:TypeError:エラー#1009:nullオブジェクト参照のプロパティまたはメソッドにアクセスできない

私は一連の問題に遭遇しています。私は、どのような解決策が使用できるかを知るのが少し難しいと感じています。

  1. 変数i QNOを持っています。 qnoは、プログラムによって呼び出される質問の数を識別するために使用されます。私のゲームでは、私は5つの質問を出力する必要があります。 qnoが5に達すると、プログラムはスコアボードを表示する次のフレームを呼び出す必要があります。私の問題は、qnoは増加しません。この問題は、後で述べる私の第3の問題に影響します。 これが原因で問題が発生したことがわかりました。TypeError: Error #1009: Cannot access a property or method of a null object reference.これはどのように修正できますか?

  2. プログラムがある、(ダイナミックテキストが質問に影響を与え、その問題を引き起こしたとchoices.butは今、私はすでに私は、質問とxmlファイル内の選択肢を呼んだということを言っている が固定されている。^^解決しようコードを呼び出すが、私は1つの問題が発生しました。それは完全な質問と選択肢を表示しません。私はそれが意味するものは、たとえば質問は、どのように鳥は食べますか?は、 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ファイルを呼び出すために使用されるコードであり、iは

を使用しているコードのセットでありますこれは問題のあるメインコードです

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:nullオブジェクト参照のプロパティまたはメソッドにアクセスできません。 quiz_flaで \t :: MainTimeline/change_question() \t – Rovy

+0

quiz_fla :: MainTimeline/ButtonAction1()でこれは単にあなたがまだインスタンスまたはnull値を持っているされていないオブジェクトにアクセスしようとしていることを意味します...おそらく "ティック"または "クロス"によって引き起こされます。 – PatrickS

関連する問題

 関連する問題