Actionscript 3 解决子对象和父函数之间的1069错误

Actionscript 3 解决子对象和父函数之间的1069错误,actionscript-3,Actionscript 3,我缩短了下面的代码示例,使其更具可读性。问题是:我创作了一大堆包含字母a-z的电影唇。这些MovieClip是称为“levelTwo”的父MovieClip的子级,其中levelTwo是该级别的一种逻辑管理器 当他们被点击时,他们会将一些数据发送到第二级进行评估(这是Hangman)。问题是,点击我得到一个1069错误。在我在LetterButton中添加event.target.parent位之前,这是一个1061错误 以下是相关代码: package { import flash.disp

我缩短了下面的代码示例,使其更具可读性。问题是:我创作了一大堆包含字母a-z的电影唇。这些MovieClip是称为“levelTwo”的父MovieClip的子级,其中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);

    }

}
} 以及第二级的相关位:

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(); 
            }
    }
公共函数checkGuess(guess:String):void
{//检查猜测是否与字符串匹配
跟踪(“猜测:”+猜测);

对于(var i:int=0;i我看不出有什么神奇之处。您订阅了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);
}

已通过以下方法解决此问题:MovieClip(父项)。checkGuess(buttonText);