Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   как два класса совместить? (http://www.flasher.ru/forum/showthread.php?t=103907)

Mnilionic 15.11.2007 00:53

как два класса совместить?
 
у меня есть, например, 2 класса на основе мувиклипа, один добовляет события онМаусСтоп, второй онДаблКлик.

По отдельности они замечательно работают.
А как мне породить мувик чтоб он имел в себе эти 2 (3...5...10) метода?

спасибо

undefined 15.11.2007 01:02

Сделать один класс от MovieClip, в него запихнуть методы добавления обоих событий и названые 2 класса наследовать не от MovieClip, а от его потомка.

Цитата:

А как мне породить мувик чтоб он имел в себе эти 2 (3...5...10) метода?
Соответсвенно новый мувик наследовать от того-же класса.

Mnilionic 15.11.2007 01:42

чё-то не пашет
mm.as
Код:

class mm extends MovieClip{
        var onMouseStop:Function;
}

onms.as
Код:

import mx.utils.Delegate;
class onms extends mm {
        var onMouseStop:Function;

        private var interval_onms:Number;
        private var onmsListener:Object = new Object();

        function onms() {
                watch("onMouseStop", Watcher);
        }
        private function Watcher(prop, oldVal, newVal){
                //trace("watched")
                if(prop == "onMouseStop"){
                        onmsListener.onMouseMove = Delegate.create(this, onMoveMouse);
                        Mouse.addListener(onmsListener);
                        return newVal;
                }
        }
        private function onStopMouse() {
                //trace("stoped")
                clearInterval(interval_onms);
                if(onMouseStop) onMouseStop();
                else Mouse.removeListener(onmsListener);
        }
        private function onMoveMouse() {
                //trace("moving")
                clearInterval(interval_onms);
                interval_onms = setInterval(Delegate.create(this, onStopMouse), 300);
        }
}

на сцене клип-экземпляр mm
Код:

mc.onMouseStop = go;
function go(){
        trace("done")
}


wvxvw 15.11.2007 13:22

Код:

class AAA {
        var __aaa:Function = function(){trace("me AAA!");}
}

Код:

class BBB {
        var __bbb:Function;
        function BBB(){
                this.__bbb = AAA.prototype.__aaa;
        }
}

Код:

var bbb:BBB = new BBB();
bbb.__bbb();


screamge 15.11.2007 13:40

Полиморфизм

Делаете цепочку наследования, третий (онДаблКлик) класс наследуется от мувиклипа, второй (онМаусСтоп) от третьего, а общий класс (онДаблКлик, онМаусСтоп) наследуется от второго. В Итоге имеете иерархию из трёх классов в которой общий совмещает в себе два класса.

Mnilionic 15.11.2007 16:59

screamge, а есть ли возвожность подключать их параллельно?
Тоесть имеется класс main и к нему подключено ещё 5 необходимых классов. И порождый мувик от main имеет все свойства и методы подключённых классов.

wvxvw, так наследуеься только свойство, которое в момент инициализации пустое и как результат - не работает :(
Код:

class mm extends MovieClip{
        var onMouseStop:Function;
        function mm(){
                onMouseStop = onms.prototype.onMouseStop;
        }
}


wvxvw 15.11.2007 18:52

Эм... в моем примере ничего не наследуется... просто назначаете внутренней переменной одного класса значение взятое из прототипа другого. А если вопрос, о том возможно ли наследовать в одном классе методы разных - ответ нет. Не в АС2 точно. Лучше изначально придумать структуру так, чтобы не сталкиваться с такими ситуациями. Если честно, то назначение кода в примере не совсем понятно... Чего в итоге нужно сделать?
Кроме того, я как-то плохо себе представляю, как будут вместе уживаться просто 2 объекта такого класса... onmsListener по ходу для всех инстансов этого класса общим будет.

Mnilionic 15.11.2007 19:24

wvxvw, понятно.
Да вы правы листнеры перекрываюся, я думал у каждого экземплара различные значения свойтв (..
Но в любом случае это был просто тестовый пример - разбираюсь в классах и ищу их применение.
спасибо.


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

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