【问题标题】:Having trouble adding mouse event handler in actionscript 3在 actionscript 3 中添加鼠标事件处理程序时遇到问题
【发布时间】:2012-03-19 00:56:58
【问题描述】:

我在这里有一个游戏,我想将事件处理程序添加到我的按钮以更改时间。我知道如何做这一切,我只是在将事件侦听器添加到我的 .as 文件中的按钮时遇到了麻烦。我有一个名为“btnEasy”的按钮,链接也为“btnEasy”。

我收到此错误:“1061:通过静态类型类的引用调用可能未定义的方法 AddEventListener”

这是我的代码:

package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.display.MovieClip;

public class MemoryGame extends MovieClip{

    private var firstTile:cards;
    private var secondTile:cards;
    private var pauseTimer:Timer;
    private var score:int;
    private var cardCount:int;

    var numberDeck:Array = new Array(1,1,2,2,3,3,4,4,5,5,6,6);
    public function MemoryGame(){


        //TIMER FUNCTION
        var levelTimer:Timer = new Timer(1000, 180);
        levelTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
        levelTimer.addEventListener(TimerEvent.TIMER, timerHandler);
        btnEasy.addEventListener(MouseEvent.CLICK, easyButtonClicked);
        var seconds:Number = 0;
        var minutes:Number = 1;
        txtTime.text = "1:00";
        levelTimer.start();

        function easyButtonClicked(e:MouseEvent):void{
            trace("easy button clicked!");
        }

        function timerHandler(e:TimerEvent):void {

        if (seconds > 00) {

        seconds -=1;

        } else {
            if (minutes > 0) {minutes -=1;seconds = 59;}
        } 

        txtTime.text = minutes+":"+(seconds >= 10 ? seconds : "0"+seconds);

            }

        function timerCompleteHandler(e:TimerEvent):void {

            e.target.reset();
            e.target.stop();
            txtTime.text="TIMES UP!";
        }





        score = 0;
        txtScore.text=""+score;

        for(x=1; x<=4; x++) {
            for (y=1; y<=3; y++){
                var randomCard = Math.floor(Math.random()*numberDeck.length);
                var tile:cards = new cards();
                tile.card = numberDeck[randomCard];
                numberDeck.splice(randomCard,1);
                tile.gotoAndStop(9);
                tile.x = (x-1) * 150;
                tile.y = (y-1) * 200;
                tile.addEventListener(MouseEvent.CLICK,tileClicked);
                addChild(tile);
                cardCount = cardCount + 1
            }
        }
        trace("Cardcount: "+cardCount);
    }

    public function tileClicked(event:MouseEvent) {
        var clicked:cards = (event.currentTarget as cards);
        if (firstTile == null){
            firstTile = clicked;
            firstTile.gotoAndStop(clicked.card);
        }
        else if (secondTile == null && firstTile != clicked){
            secondTile = clicked;
            secondTile.gotoAndStop(clicked.card);
            if (firstTile.card == secondTile.card){
                pauseTimer = new Timer(1000, 1);
                pauseTimer.addEventListener(TimerEvent.TIMER_COMPLETE,removeCards);
                pauseTimer.start();

            }
            else {
                pauseTimer = new Timer(1000, 1);
                pauseTimer.addEventListener(TimerEvent.TIMER_COMPLETE,resetCards);
                pauseTimer.start();
            }
        }

    }

    public function resetCards(event:TimerEvent) {

        firstTile.gotoAndStop(9);
        secondTile.gotoAndStop(9);
        firstTile = null;
        secondTile = null;
        pauseTimer.removeEventListener(TimerEvent.TIMER_COMPLETE,resetCards);
        score = score - 2;
        txtScore.text=""+score;
    }

    public function removeCards(event:TimerEvent){

        removeChild(firstTile);
        removeChild(secondTile);
        firstTile = null;
        secondTile = null;
        pauseTimer.removeEventListener(TimerEvent.TIMER_COMPLETE,removeCards);
        score = score + 10;
        txtScore.text=""+score;
        cardCount = cardCount - 2;
        trace("Cardcount: " + cardCount);

        if (cardCount == 0){
            this.gotoAndStop(2);
            txtFinalScore.text=" "+score;
        }
                }

}   
}

错误在“btnEasy.addEventListener(MouseEvent.CLICK, easyButtonClicked);”处

任何帮助都会很棒!谢谢!

【问题讨论】:

  • 在您通过库访问的 btnEasy 属性中,您是否看到“导出第一帧”?另外,这段代码是在 btnEasy 实例出现在时间轴之前还是之后执行的?

标签: actionscript-3


【解决方案1】:

如果你有一个名为btnEasy 的库符号,这是它的类名。也就是说,您正在尝试在类而不是类的实例上使用addEventListener() - 类似于通过Math 类本身调用.round().cos() 而不需要创建一个实例Math.

您需要创建btnEasy 的实例并将您的事件侦听器添加到其中:

var btn:btnEasy = new btnEasy();
btn.addEventListener( ... );

你正在做的与这样做类似:

MovieClip.addEventListener( ... );

【讨论】:

  • 啊,是的!工作完美!我早该知道。但是现在,它不是打印“点击了简单的按钮!”到输出。 ://
  • 如果您将btnEasy 的实例作为图形添加到时间线,并且您正试图定位它,您需要做的就是为该按钮分配一个不同的名称。删除var btn:btnEasy = new btnEasy()并将属性面板中的实例名称更改为btn
  • 太棒了!非常感谢马蒂!
猜你喜欢
  • 2012-05-14
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多