2012-03-19 180 views
0

我在这里有一个游戏,我想添加事件处理程序到我的按钮来改变时间。我知道如何做到这一点,我只是在为我的.as文件中的按钮添加事件监听器而烦恼。我有一个名为“btnEasy”的按钮,连接也是“btnEasy”。无法在actionscript 3中添加鼠标事件处理程序

我收到此错误:“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);“

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

+0

在属性btnEasy通过库访问,你看到“导出第一帧”?此外,是否在btnEasy实例出现在时间轴之前或之后执行此代码? – ariestav 2012-03-19 01:05:06

回答

0

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

你需要创建的btnEasy的实例和事件侦听器添加到:

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

你在做什么类似于这样:

MovieClip.addEventListener(...); 
+0

啊是的!完美工作!我早该知道。 但现在,它不打印“轻松按钮点击!”输出。 :/ – DommyCastles 2012-03-19 01:17:21

+0

如果您将一个'btnEasy'的实例添加到时间线中,并且您试图将其作为目标,那么您只需为该按钮指定一个不同的名称即可。删除'var btn:btnEasy = new btnEasy()'并将属性面板中的实例名称更改为'btn'。 – Marty 2012-03-19 01:19:24

+0

很棒!非常感谢你Marty! – DommyCastles 2012-03-19 01:24:14