W tym momencie starasz się skasować oEF, który nie istnieje. Słowo this jest użyte poza poza metodą onRoll więc odnosi się do klipu nadrzędnego a ten nie miał przypisanego oEF.
Delete zwraca booleana, jeżeli udało się usunąć to true, jeśli nie to false.
Twój kod:
Kod: Zaznacz cały
my_mc.stop();
my_mc.onRollOver = function() {
this.onEnterFrame = function() {
if (this._currentframe < 10) {
this.nextFrame();
}
};
};
czy_skasowalem = delete this.onEnterFrame;
trace(czy_skasowalem);
my_mc.onRollOut = function() {
this.onEnterFrame = function() {
if (this._currentframe > 0) {
this.prevFrame();
}
};
};
czy_skasowalem = delete this.onEnterFrame;
trace(czy_skasowalem);
Damy oEF do this
Kod: Zaznacz cały
this.onEnterFrame = function() {
};
my_mc.stop();
my_mc.onRollOver = function() {
this.onEnterFrame = function() {
if (this._currentframe < 10) {
this.nextFrame();
}
};
};
czy_skasowalem = delete this.onEnterFrame;
trace(czy_skasowalem);
my_mc.onRollOut = function() {
this.onEnterFrame = function() {
if (this._currentframe > 0) {
this.prevFrame();
}
};
};
czy_skasowalem = delete this.onEnterFrame;
trace(czy_skasowalem);
Pierwszy wynik true drugi false bo przy drugim kasowaniu nie było już oEF. Ale kasowany jest oEF nie my_mc tylko nadrzędny. Nawet gdybyś kasował oEF dla my_mc w tym miejscu, ,w którym to robisz teraz to nic byś nie uzyskał, gdyż kasowanie nie może nastąpić, też zwróci false bo jeszcze nie ma oEF, będzie dopiero po akcji buttona, a że delete leży poza zdarzeniami buttona zachodzi tylko raz po wczytaniu klatki. Później nie jest już wywoływane.
Żeby kasować trzeba sprawdzać czy kasowanie jest wymagane.
Kod: Zaznacz cały
my_mc.stop();
my_mc.onRollOver = function() {
this.onEnterFrame = function() {
if (this._currentframe < 10) {
this.nextFrame();
} else {
trace(delete this.onEnterFrame);
}
};
};
delete mc.onEnterFrame;
my_mc.onRollOut = function() {
this.onEnterFrame = function() {
if (this._currentframe != 1) {
this.prevFrame();
} else {
trace(delete this.onEnterFrame);
}
};
};