Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Двойной extends (http://www.flasher.ru/forum/showthread.php?t=171781)

Lunatic 24.11.2011 06:12

Двойной extends
 
Собственно как два раза расширить класс? EventDispatcher+Sprite

Код AS3:

package{
        import flash.display.Sprite;
        import flash.display.Loader;
        import flash.events.Event;
        import flash.events.ProgressEvent;
        import flash.events.EventDispatcher;
        import flash.net.URLRequest;
 
  //public class FLoader extends Sprite{
        public class FLoader extends EventDispatcher{
                private var Percent:Number=0;
 
                public function FLoader(FName:String):void{
                        var loader = new Loader();
                        loader.load(new URLRequest(FName));
                        loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleate);
                }
 
                public function get GetPercent():Number{
                        return Percent;
                }
 
                private function onCompleate(e:Event){
                        dispatchEvent(new Event("LoadCompleate"));
                }
 
                private function onProgress(e:ProgressEvent){
                        Percent=int(e.bytesLoaded/e.bytesTotal)*100;
                }
        }
}

Использовать где-то так хотелось бы
Код AS3:

var Image:FLoader=new FLoader("img/1.png");
Image.addEventListener("LoadCompleate", onLoadCompleate)
function onLoadCompleate(e:Event){
        Image.x=100;
        addChild(Image);
}

Надеюсь уловили что я хочу. Cоздать класс который упростит метод загрузки изображений, и сгенирирует событие готовности обработав которое можно будет разместить изображение в нужных координатах, добавить на сцену, и т.д.

Aquahawk 24.11.2011 06:57

То, что вы хотите, называется множественное наследование. Оно запрещено в AS3. Однако без него можно сделать. Взгляните в документацию, спрайт уже ивент диспатчер. Вы можете просто наследовать спрайт, и диспатчить событие, всё будет работать.

Lunatic 24.11.2011 07:27

Спасибо! Буду знать!
Запрещенно или нереализуемо?

goodguy 24.11.2011 07:45

нереализуемо = запрещено, в данном случае.

Вообще, на такие случаи в АС3 существуют интерфейсы. Их можно имплементить сколько угодно, через запятую

BuKT 24.11.2011 07:59

Цитата:

Вообще, на такие случаи в АС3 существуют интерфейсы. Их можно имплементить сколько угодно, через запятую
Можно. Но не каждый может догадаться, как именно происходит диспач, чтобы повторить его своей реализацией

goodguy 24.11.2011 08:14

А зачем это тут? В конкретно этом случае достаточно расширить спрайт

Aquahawk 24.11.2011 08:15

Цитата:

Сообщение от BuKT (Сообщение 1047909)
Можно. Но не каждый может догадаться, как именно происходит диспач, чтобы повторить его своей реализацией

А зачем повторять? Положили внутри себя диспатчер, сделали композицию т.е. Заимплементили все методы интерфейса IEventDispatcher и в них тупо всё перенаправили на этот диспатчер, и всё, мы полноценный диспатчер.

BuKT 24.11.2011 08:17

Цитата:

в них тупо всё перенаправили на этот диспатчер, и всё, мы полноценный диспатчер.
Такой ли уж полноценный? А event.target?

Aquahawk 24.11.2011 08:20

Это уже чуточку сложнее, аж при создании экземпляра в параметре указать ему что будет таргетом, а вот правильное всплытие это уже вообще отдельная тема. Правда я пока не встречался с такой ситуацией.

zuxul 24.11.2011 10:17

В данном случае, если я уловил мысль, нужно всего лишь воспользоваться классом Loader. Он загрузит в себя картинку, скажет что загрузился (contentLoaderInfo - Event.COMPLETE), и можно до полной загрузки указать место, где ему быть.


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

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