PDA

Просмотр полной версии : Вызов функции внутри класса


MyChemic
21.04.2008, 16:45
Добрый день, прошу помощи. Есть класс, в котором объявлены методы:


import mx.transitions.*;
import mx.transitions.easing.*;
import mx.utils.Delegate;

class myClass extends MovieClip{
public function myClass(){
b();
}

private function b(){
var a = new Tween(mc, "_y", Strong.easeOut, 0, 100, 1, true);
a.onMotionFinished = function(){
Delegate.create(this, d);
}
}

private function d(){
trace("working");
}

}


соответственно, не могу вызвать функцию d из такой конструкции. Как быть? Задача: Необходимость по завершению процесса Tween вызвать функцию d();

CrazyFlasher
21.04.2008, 17:19
a.onMotionFinished = Delegate.create(this, d);

Жень Шень
21.04.2008, 17:29
и это тоже поменять, мне так кажется:
var a = new Tween(this, "_y", Strong.easeOut, 0, 100, 1, true);

MyChemic
21.04.2008, 17:30
угу, понятно. Но это примерный случай, а в реале вложеность немного иная:

private function b(){
var a = new Tween(mc, "_y", Strong.easeOut, 0, 100, 1, true);
a.onMotionFinished = function(){
var b = new Tween(mc, "_y", Strong.easeOut, 0, 100, 1, true);
b.onMotionFinished = function(){
var c = new Tween(mc, "_y", Strong.easeOut, 0, 100, 1, true);
c.onMotionFinished = Delegate.create(this, d);
}
}
}

private function d(){
trace("working");
}


как в таком случае быть? То есть как достучаться до функции, в независимости от вложенности?

Жень Шень
21.04.2008, 17:53
Посмотри ссылку (http://www.flasher.ru/forum/showthread.php?t=111024). Там в третьем посту iNils помог найти, как обращаться к анонимной функции. Должно помочь.

MyChemic
21.04.2008, 18:14
мне кажется не совсе то, там "слушатель" ждет события загрузки изображения. У меня же нет загрузки изображения, даже, если загрузить в пустую изображение, а потом его удалить, то все равно почему-то конструкция:

private function b(){
var a = new Tween(mc, "_y", Strong.easeOut, 0, 100, 1, true);
a.onMotionFinished = function(){
var b = new Tween(mc, "_y", Strong.easeOut, 0, 100, 1, true);
b.onMotionFinished = function(){
var c = new Tween(mc, "_y", Strong.easeOut, 0, 100, 1, true);
c.onMotionFinished = function(){
var _mc:MovieClipLoader = new MovieClipLoader();
_mc.addListener(this);
_mc.loadClip("pic.jpg", _root);
}
}
}
}

private function onInitLoad(target_mc:MovieClip){
_root._mc.removeMovieClip();
trace("working");
}


не работает. Может быть можно как-то повесить "слушателя" на Tween класс? К примеру:

var tw = new Tween(mc, "_y", Strong.easeOut, 100, 0, 1, true);
tw.addListener("onMotionFinished", d);

function d(){
trace("working");
}

???

Жень Шень
21.04.2008, 18:46
Не знаю, как передается ссылка на mc, но так работает
import mx.transitions.*;
import mx.transitions.easing.*;
import mx.utils.Delegate;
class myClass extends MovieClip {
var mc:MovieClip;
public function myClass() {
mc = this;
b(mc);
}
private function b() {
var f = d;
var a = new Tween(mc, "_y", Strong.easeOut, 0, 100, 1, true);
a.onMotionFinished = function() {
trace(1);
var b = new Tween(mc, "_y", Strong.easeOut, 100, 0, 1, true);
b.onMotionFinished = function() {
trace(2);
var c = new Tween(mc, "_y", Strong.easeOut, 0, 100, 1, true);
c.onMotionFinished = function() {
trace(3);
f();
};
};
};
}
private function d() {
trace("working");
}
}

MyChemic
21.04.2008, 18:53
Не знаю, как передается ссылка на mc, но так работает
import mx.transitions.*;
import mx.transitions.easing.*;
import mx.utils.Delegate;
class myClass extends MovieClip {
var mc:MovieClip;
public function myClass() {
mc = this;
b(mc);
}
private function b() {
var f = d;
var a = new Tween(mc, "_y", Strong.easeOut, 0, 100, 1, true);
a.onMotionFinished = function() {
trace(1);
var b = new Tween(mc, "_y", Strong.easeOut, 100, 0, 1, true);
b.onMotionFinished = function() {
trace(2);
var c = new Tween(mc, "_y", Strong.easeOut, 0, 100, 1, true);
c.onMotionFinished = function() {
trace(3);
f();
};
};
};
}
private function d() {
trace("working");
}
}

супер, спасибо большое, оказывается все дело в выделеной строчки, так мы вначале инициализируем переменную и даем ей понять, что она и есть наша внешняя функция. Гранд мерси)