2011-07-01 7 views
0

以下のコードサンプルを短くして読みやすくしました。ここでは擦れている:私は、文字のa - zを含むムービークリップの全体の束を作成します。これらのムービークリップは、「levelTwo」という名前の親ムービークリップの子です。levelTwoは、そのレベルのロジックマネージャの一種です。子オブジェクトと親関数の間の1069エラーの解決

クリックすると、評価のためにlevelTwoにデータが送信されます(これはHangmanです)。問題は、クリックすると1069エラーが発生することです。 LetterButtonのevent.target.parentビットを追加するまで、1061のエラーが発生しました。

package { 
import flash.display.MovieClip; 
import flash.events.MouseEvent; 
import flash.events.Event; 

public class LetterButton extends MovieClip { 

    var buttonText:String; 

    public function LetterButton(lText:String,objX:int,objY:int) 
    { 
     trace ("Creating new button"); 
     x = objX; 
     y = objY; 
     buttonText = lText; 
     letterText.text = buttonText; 
     this.stop(); 
     addEventListener(MouseEvent.MOUSE_OVER,onMouseOver); 
     addEventListener(MouseEvent.MOUSE_OUT,onMouseOut); 
     this.addEventListener(MouseEvent.CLICK,onMouseClick); 
    } 

    private function onMouseOver(event:Event):void 
    { 
     gotoAndStop(2); 
     letterText.text = buttonText; 
     //trace ("You're over me and my text is " + buttonText); 
    } 

    private function onMouseOut(event:Event):void 
    { 
     gotoAndStop(1); 
     letterText.text = buttonText; 
     //trace ("You're out of me and my text is " + buttonText); 
    } 

    private function onMouseClick(event:Event):void 
    { 
     trace ("I am clicked and I am " + buttonText); 
     event.target.parent.checkGuess(buttonText); 

    } 

} 

} そしてlevelTwoから該当ビット:私はここに魔法を見ない

public function checkGuess(guess:String):void 
    { //Check to see if the guess matches the string 


     trace ("Guess: "+guess); 
     for(var i:int=0;i<answer.length;i++) 
      { 
       if(guess == answer.charAt(i)) 
       { 
        censoredAnswer[i] = guess; 
        trace ("Got one right"); 
        answerField.text = answerRedisplay(); //Do it now or it won't update for the check 
       } 
      } 
     if (answerField.text == answer) 
      { 
       setWin(); 
      } 
    } 
+0

これを修正するための管理:MovieClip(親).checkGuess(buttonText); – GilloD

答えて

0

はここに関連するコードです。 LetterButtonインスタンスを購読すると、それを指すevent.target参照が取得されます。

すべてのLetterButtonインスタンスを含む親クリップを購読する方がよいと思います。 MouseEvent.CLICKはバブリングイベントです。その内部で何かがクリックされるたびに、親でトリガされたハンドラを取得します。

サンプルコードをご覧ください。

// inside level two class 
addEventListener(MouseEvent.CLICK,onMouseClick); 

private function onMouseClick(event:MouseEvent):void 
{ 
    var target:LetterButton = event.target as LetterButton; 
    if (target == null) { 
     return; 
    } 
    // here we know, that some LetterButton instance was clicked 
    // and target var holds it's reference 

    // either make buttonText public, or create a getter/accessor 
    // var text:String = target.buttonText; 
    var text:String = target.getButtonTextSomehow(); 

    checkGuess(text); 
} 
関連する問題