#actionscript-3 #flash #addeventlistener
#actionscript-3 #flash #addeventlistener
Вопрос:
Я получаю сообщение об ошибке при попытке добавить прослушиватель событий в класс кнопки на моей сцене.
1061: Вызов, возможно, неопределенного метода addEventListener через ссылку со статическим типом Class.
На моей сцене у меня есть кнопка с именем экземпляра stopBtn, это также экспортируется в класс actionscript под названием classes.stopBtn (stopBtn.as в папке с именем ‘classes’). Кнопка находится на первом ключевом кадре на основной временной шкале, в слое с другими кнопками на этом слое
Ошибка находится в строке 10 stopBtn.as файл:
package classes {
import flash.display.SimpleButton;
import flash.events.MouseEvent;
import flash.display.MovieClip;
public class stopBtn extends SimpleButton {
public function stopBtn() {
stopBtn.addEventListener(MouseEvent.CLICK, stopButtonFunction);
}
function stopButtonFunction(event:MouseEvent):void {
MovieClip(root).trackPosition = 0;
MovieClip(root).mySoundChannel.stop();
MovieClip(root).playPause.gotoAndPlay(2);
}
}
}
Я нашел много потоков для кода ошибки 1061, но, похоже, ни один из них не имеет отношения к моей проблеме!
Я попытался обеспечить импорт всех типов событий с помощью
Import flash.events.*; but this makes no difference.
Ответ №1:
Это должно быть довольно очевидно. Вы пытаетесь добавить прослушиватель событий в класс, а не в объект.
stopBtn.addEventListener(MouseEvent.CLICK, stopButtonFunction);
stopBtn
это имя созданного вами класса. Чтобы добавить прослушиватель событий в экземпляр, измените свой код на
this.addEventListener(MouseEvent.CLICK, stopButtonFunction);
Это гарантирует, что вы добавите прослушиватель событий к объекту button, а не к классу, как вы пытались (как вы видели, это запрещено, потому что это не имеет смысла)
Комментарии:
1. «Чтобы добавить прослушиватель событий в экземпляр, используйте»…. что? Кажется, в этом решении чего-то не хватает.
2. упс, это произошло в основном потому, что я написал этот ответ за 2 сеанса и потерял ход мыслей между ними: P
Ответ №2:
Ваш код должен быть похож
package classes {
import flash.display.SimpleButton;
import flash.events.MouseEvent;
import flash.display.MovieClip;
public class stopBtn extends SimpleButton {
public function stopBtn() {
addEventListener(MouseEvent.CLICK, stopButtonFunction);
}
function stopButtonFunction(event:MouseEvent):void {
MovieClip(root).trackPosition = 0;
MovieClip(root).mySoundChannel.stop();
MovieClip(root).playPause.gotoAndPlay(2);
}
}
}
Комментарии:
1. Я вижу, что вы там сделали! итак, поскольку этот класс предназначен специально для кнопки ‘stopBtn’, мне не нужно определять stopBtn. перед прослушивателем событий он уже знает, что я работаю с stopBtn. Спасибо! 🙂
2. @TomFrom, ты ошибаешься. Когда вы писали
stopBtn.add...
, компилятор взялstopBtn
в качестве имени класса (public class stopBtn extends SimpleButton {
. Когда вы удалили этот stopBtn, компилятор принимает его как подразумеваемую ссылку на объект класса. Вы можете явно указать это, используяthis
ключевое слово.3. вам не нужно добавлять this, потому что оно равно this.addEven… и addEvent… в любом из методов класса
4. @zaynyatyi, я сомневаюсь, что ты прочитал мой комментарий полностью… Я специально написал, что только addEventListener примет подразумеваемый
this.