Просмотр полной версии : вызов функции из базового класса
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:
я не могу понять, кто вас так учил называть переменные? особено когда выкладываешь чтобы видели другие люди?!
и почему два класса наследуют MovieClip, а не друг друга? я ничего не понял.
если имелось ввиду что ttt наследует ss то из tt можно либо просто
fn();
или если метод переопределен, и нужен старый то
super.fn();
А почему класс имеет такое название?
И 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();
}
}
}
Ужас. Функции не объявляются внутри функции!
Почему нельзя в mmx передать ссылку на Run и вызвать метод какой-нибудь?
farmonol
17.01.2007, 14:38
потому что изначально была идея максимально упростить обращение с объектом (А), который генерирует некие события.
Чтобы пользователь именно внутри конструктора базового класса , в котором создавался экземпляр объекта (А), мог написать свои обработчики событий для объекта (А).
Так и подписывай на события обработчик в другом классе.
farmonol
17.01.2007, 15:35
Так и подписывай на события обработчик в другом классе.
Подскажите плиз примерчик, что-то не получается у меня
Обычная подписка:
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()');
}
}
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.