Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   вызов функции из базового класса (http://www.flasher.ru/forum/showthread.php?t=90699)

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
Так и подписывай на события обработчик в другом классе.

Подскажите плиз примерчик, что-то не получается у меня

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()');
        }
    }
}



Часовой пояс GMT +4, время: 05:18.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.