Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Экспортер динамической библиотеки (http://www.flasher.ru/forum/showthread.php?t=172622)

AlexCooper 14.12.2011 05:50

Экспортер динамической библиотеки
 
Доброго время суток.
В своей работе имитирую динамическую библиотеку.
Код AS3:

package wa.games.tanks.display.skins.classes
{
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.net.URLRequest;
        import flash.errors.IOError;
        import flash.events.IOErrorEvent;
        import flash.events.Event;
        import flash.display.Loader;
        import flash.display.LoaderInfo;
        import flash.display.Bitmap;
        import flash.display.BitmapData;
 
    public class SkinLogistic extends Sprite {
 
        private var skinlib:Array;
 
        public function SkinLogistic() {
                        skinlib = new Array();
        }
 
                public function addSkin(id:String, url:String):void
                {
                        var imageLoader:Loader = new Loader();
                        imageLoader.load(new URLRequest(url + "?id=" + id));
 
                        skinlib[id] = new Object();
                        skinlib[id].status = 'LOAD';
                        skinlib[id].resource = imageLoader;
                        skinlib[id].resource.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
                        skinlib[id].resource.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
                }
 
                public function verify(property:String = null):String
                {
                        switch (property)
                        {
                                case "loading":
                                {                                                       
                                        for ( var temp:* in skinlib )
                                        {
                                                if (skinlib[temp].status == 'LOAD')
                                                {
                                                        return 'LOAD';
                                                        break;
                                                }                                               
                                        }
                                        return 'COMPLETE';
                                } break;
                        }       
                        return 'NaN';
                }
 
                public function export(id:String, type:String = null):* {
                        switch (type)
                        {
                                case "bitmap":
                                {
                                        return skinlib[id].resource.content;
                                } break;
 
                                case "sprite":
                                {
                                        var sp:Sprite = new Sprite();
                                        sp.addChild(skinlib[id].resource);
                                        return sp;
                                } break;
 
                                default:
                                {
                                        return skinlib[id].resource;
                                } break;
                        }
                }
 
                public function get status():String
                {
                        return STATUS;
                }
 
                private function onLoadComplete(e:*):void
                {
                        var id:String = e.target.parameters.id;
                        skinlib[id].status = 'ACTIVE';                       
                }
 
                private function onLoadError(e:*):void
                {
                        var id:String = e.target.parameters.id;
                        skinlib[id].status = e.toString();
                }
    }
}

Но в результате выполнения
Код AS3:

           var skin:SkinLogistic = new SkinLogistic();
 
          skin.addSkin('LineBack', 'sources/lineback.png')
 
          var line1:* = skin.export('LineBack','sprite');
 
          var line2:* = skin.export('LineBack','sprite');

line1 и line2 ссылаются на один и тотже объект, а мну нужно что бы ссылания вообще не было, а объекты получали лишь объект который по сути нужно просто клонировать.

Помогите пожалуйста.
Может что не понятно написал, комментируйте уточню.

wvxvw 15.12.2011 11:20

Я задумку не понял. Одно могу сказать наверняка - switch с одним case выглядит очень странно. И еще более странно выглядит break после return.

GBee 15.12.2011 20:39

Код вообще ужасен.
line1 и line2 не могут ссылаться на один объект, если верить вашему коду - это два разных спрайта. line2 по идее содержит лоадер, который вы пихнули ранее.

Добавлено через 2 минуты
Не хотите весь скин пихнуть в свфку и забирать оттуда по getDefinition?


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

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