Actionscript 3 AS3:通过静态类型类的引用调用可能未定义的方法addEventListener

Actionscript 3 AS3:通过静态类型类的引用调用可能未定义的方法addEventListener,actionscript-3,flash,Actionscript 3,Flash,我收到以下错误: 场景1,层“动作”,第1帧,第110行,第14 1061列:通过引用静态类型类调用可能未定义的方法addEventListener 场景1,层“动作”,第1帧,第113行,第14 1061列:通过引用静态类型类调用可能未定义的方法removeEventListener 场景1,层“动作”,第1帧,第128行,第14 1061列:通过引用静态类型类调用可能未定义的方法addEventListener 第一幕, 层“动作”,第1帧,第131行,第14 1061列:调用 未定义的方法

我收到以下错误:

场景1,层“动作”,第1帧,第110行,第14 1061列:通过引用静态类型类调用可能未定义的方法addEventListener

场景1,层“动作”,第1帧,第113行,第14 1061列:通过引用静态类型类调用可能未定义的方法removeEventListener

场景1,层“动作”,第1帧,第128行,第14 1061列:通过引用静态类型类调用可能未定义的方法addEventListener

第一幕, 层“动作”,第1帧,第131行,第14 1061列:调用 未定义的方法通过带有static 类型类

代码部分是:

    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);
        }
    }
var startingcaveman:Array=newarray();
对于(var i:Number=0;i这应该与它相关

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);
    }
}
var-startingcaveman:Array=[];

对于(var i:Number=0;i一个简单的答案,它应该允许您解决您的问题,并且考虑到您的编码风格,它可能也会解决许多未来的问题:

您不能将类的名称用作变量名。在您的情况下,您有一个名为btn_caveman的类,但稍后您也尝试使用名为btn_caveman的变量。永远不要这样做

如果您遵循编码约定,您将永远不会遇到此类问题。类名应该是这样的:

ButtonCaveman
buttonCaveman
变量名应该是这样的:

ButtonCaveman
buttonCaveman

这意味着
btn_caveman
是一个类的名称,而不是一个类的实例。@Marty很抱歉,可能是因为我花了太长时间才这么做,但我到底要做什么才能让它工作呢?我这样做是作为Uni小组评估的一部分,我的小组根本没有帮助我,他们所做的只是玩游戏--要么改变课程s name或变量名。它消除了错误,但随后给了我以下错误:
TypeError:error#1009:无法访问空对象引用的属性或方法。在stoneApp_new_fla::MainTimeline/AllowTacpaveman()[stoneApp_new_fla.MainTimeline::frame1:115]在stoneApp_new_fla::MainTimeline/frame1()[stoneApp_new_fla.MainTimeline::frame1:22]运行时::ContentPlayer/loadInitialContent()运行时::ContentPlayer/playRawContent()运行时::ContentPlayer/playContent()运行时::AppRunner/run()在ADLAppEntry/run()运行时全局/运行时::ADLEntry()
第115行是
btn.addEventListener(TouchEvent.TOUCH\u点击,btn\u菜单);