无法在actionscript 3中添加鼠标事件处理程序
我在这里有一个游戏,我想添加事件处理程序到我的按钮来改变时间。我知道如何做到这一点,我只是在为我的.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);“
任何帮助都会很棒!谢谢!
如果您有一个名为btnEasy
的图书馆符号,这是它的类名。也就是说,您试图在类上使用addEventListener()
而不是类的实例 - 类似于.round()
和.cos()
通过Math
类本身调用,而不需要创建Math
的实例。
你需要创建的btnEasy
的实例和事件侦听器添加到:
var btn:btnEasy = new btnEasy();
btn.addEventListener(...);
你在做什么类似于这样:
MovieClip.addEventListener(...);
啊是的!完美工作!我早该知道。 但现在,它不打印“轻松按钮点击!”输出。 :/ – DommyCastles 2012-03-19 01:17:21
如果您将一个'btnEasy'的实例添加到时间线中,并且您试图将其作为目标,那么您只需为该按钮指定一个不同的名称即可。删除'var btn:btnEasy = new btnEasy()'并将属性面板中的实例名称更改为'btn'。 – Marty 2012-03-19 01:19:24
很棒!非常感谢你Marty! – DommyCastles 2012-03-19 01:24:14
在属性btnEasy通过库访问,你看到“导出第一帧”?此外,是否在btnEasy实例出现在时间轴之前或之后执行此代码? – ariestav 2012-03-19 01:05:06