簡體   English   中英

AS3:通過靜態類型為Class的引用調用可能未定義的方法addEventListener

[英]AS3: Call to a possibly undefined method addEventListener through a reference with static type Class

我收到以下錯誤:

場景1,“動作”層,第1幀,第110行,第14列,列1061:通過靜態類型為Class的引用調用可能未定義的方法addEventListener。

場景1,“操作”層,第1幀,第113行,第14列,列1061:通過靜態類型為Class的引用調用可能未定義的方法removeEventListener。

場景1,“動作”層,第1幀,第128行,第14列,列1061:通過靜態類型為Class的引用調用可能未定義的方法addEventListener。

場景1,“操作”層,第1幀,第131行,列141061:通過具有靜態類型Class的引用調用可能未定義的方法removeEventListener。

代碼部分是:

    function allowTapCaveman():void {
/*line 110*/    btn_caveman.addEventListener(TouchEvent.TOUCH_TAP, btn_cavemanMenu);
    }
    function cancelTapCaveman():void {
/*line 113*/    btn_caveman.removeEventListener(TouchEvent.TOUCH_TAP, btn_cavemanMenu);
    }
    function allowTapCavemanClose():void {
/*line 128*/    btn_caveman.addEventListener(TouchEvent.TOUCH_TAP, btn_cavemanMenuClose);
    }
    function cancelTapCavemanClose():void {
/*line 138*/    btn_caveman.removeEventListener(TouchEvent.TOUCH_TAP, btn_cavemanMenuClose);
    }

btn_caveman是一個動畫片段(是的,我知道我有“ btn”),可以通過數組在舞台上調用;

var startingcaveman:Array = new Array();
for (var i:Number = 0; i<2; i++) {
    startingcaveman.push(new btn_caveman());
    addChild(startingcaveman[i]);
    startingcaveman[i].name = 'startingcavemen' +i;
    startingcaveman[i].x = Math.random()*550;
    startingcaveman[i].y = Math.random()*400;
}
    startingcaveman[0].x = 213.60;
    startingcaveman[0].y = 312.90;
    startingcaveman[1].x = 211.75;
    startingcaveman[1].y = 400.15;
    stage.addEventListener(Event.ENTER_FRAME, example);
    function example (evt:Event) {
        for each (var btn_caveman in startingcaveman) {
            addEventListener(TouchEvent.TOUCH_TAP, btn_cavemanMenu3);
        }
    }

它可能是如此簡單,但我無法理解,這使我煩惱。

一個簡單的答案應該可以解決您的問題,並鑒於您的編碼風格,也可以擺脫許多將來的問題:

您不能將類的名稱用作變量名。 在您的情況下,您有一個名為btn_caveman的類,但稍后嘗試使用一個名為btn_caveman的變量。 永遠不要這樣做。

如果要遵循編碼約定,則永遠不會遇到這類問題。 類名應該是這樣的:

ButtonCaveman

變量名應采用以下方式:

buttonCaveman

這應該

var startingcaveman:Array = [];
for (var i:Number = 0; i<2; i++) {
  // symbols should start with an upcase letter,
  // because they're classes
  // stick to "Caveman" for example
  var btn:MovieClip = new btn_caveman();
  startingcaveman.push(btn);
  addChild(btn);
  btn.name = 'startingcavemen' +i;
  btn.x = Math.random()*550;
  btn.y = Math.random()*400;
}

startingcaveman[0].x = 213.60;
startingcaveman[0].y = 312.90;
startingcaveman[1].x = 211.75;
startingcaveman[1].y = 400.15;
stage.addEventListener(Event.ENTER_FRAME, example);

function example (evt:Event) {
    // here was the error. you used the class name.
    // that's why naming is important!
    for each (var btn in startingcaveman) {
        btn.addEventListener(TouchEvent.TOUCH_TAP, btn_cavemanMenu3);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM