PDA

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


farmonol
16.01.2007, 21:28
Прошу прощения за мою некомпетентность.... Возникла задача, с которой никак не получается справиться . Суть в следующем.
Предположим есть некий класс, c обработчиком EnterFrame:

public class ttt extends MovieClip
{
public function ttt(z:Object) {
z.addEventListener(Event.ENTER_FRAME, onEnter);
}
function onEnter(event:Event):void {

// здесь должна вызываться ф-ция fn()
// расположенная в базовом классе
// каким образом???????


}
}

В базовом классе пишем:

public class Ss extends MovieClip
{

public function Ss() {

var be:ttt = new ttt(stage);

// здесь ф-ция которая должна вызываться из обработчика в ttt:

function fn() {
trace("hello world");
}

}
}

Можно ли каким-то образом заставить обработчик из объекта be
выполнять функцию внутри конструктора в базовом классе? :eek:

Nirth
16.01.2007, 22:33
я не могу понять, кто вас так учил называть переменные? особено когда выкладываешь чтобы видели другие люди?!

и почему два класса наследуют MovieClip, а не друг друга? я ничего не понял.

если имелось ввиду что ttt наследует ss то из tt можно либо просто


fn();


или если метод переопределен, и нужен старый то

super.fn();

etc
17.01.2007, 00:05
А почему класс имеет такое название?
И z не имеет метода addEventListener.

Приведите в порядок свой код.

farmonol
17.01.2007, 14:00
Добился всётаки как это можно реализовать.
Здесь создаем ф-цию n() и экземпляр объекта который будет ее выполнять:

package
{
import flash.display.*;
import flash.events.*;

public class Run extends MovieClip
{

public function Run() {

var z:Test = new Test();
z.txt = "Hello World";

function n(){

trace(z.txt);
}

z.mmx(n);

}

}
}

А вот класс из которого будет вызываться ф-ция n() :


package
{
import flash.display.*;
import flash.events.*;


public class Test extends MovieClip
{
public var txt:String;

public function Test() {

}

public function mmx(nt:Function) {
nt();
}


}
}

etc
17.01.2007, 14:04
Ужас. Функции не объявляются внутри функции!
Почему нельзя в mmx передать ссылку на Run и вызвать метод какой-нибудь?

farmonol
17.01.2007, 14:38
потому что изначально была идея максимально упростить обращение с объектом (А), который генерирует некие события.
Чтобы пользователь именно внутри конструктора базового класса , в котором создавался экземпляр объекта (А), мог написать свои обработчики событий для объекта (А).

etc
17.01.2007, 15:32
Так и подписывай на события обработчик в другом классе.

farmonol
17.01.2007, 15:35
Так и подписывай на события обработчик в другом классе.
Подскажите плиз примерчик, что-то не получается у меня

etc
17.01.2007, 16:50
Обычная подписка:
package {
import flash.events.Event;
import flash.display.Sprite;
import Receiver;
public class Dispatcher extends Sprite {
public function Dispatcher() {
super();
var receiver:Receiver = new Receiver();
this.addEventListener(Event.ENTER_FRAME,receiver.enterFrameHandler);
}
}
}
package {
import flash.events.Event;
public class Receiver() {
public function Receiver() {
}
public function enterFrameHandler(event:Event):void {
trace(this+'.enterFrameHandler()');
}
}
}