Форум 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=129653)

nOobCrafter 07.09.2009 15:05

Как правильно внедрить кучу иконок?
 
День добрый, собсна сабж, у меня есть 20+ иконок (а может быть и больше) и мне надо их внедрить во флекс прилождение. Писать 20+ раз:
Код AS3:

[Embed('DataFiles/icons/icon1.png')]
public var myIcon1:Class;

как то неочень хочется, есть ли более удобные способы добавить их?

wvxvw 07.09.2009 17:42

А что именно смущает? Писать пути все равно прийдется так или иначе.

gnus 07.09.2009 18:32

склейте их в одну "ленту" и загрузите, а когда надо "разрежьте" на отдельные куски

Код AS3:

[Embed(source="icons.png")] //<- лента квадратных одноразмерных картинок  
private var icons:Class;               
 
private var images:Array=new Array();// <-массив для картинок
 
private function loadIcons():void
{
  var asset:BitmapAsset=new icons();                                               
  var countIcons:int=asset.bitmapData.width/asset.bitmapData.height;
  var iconWidth:Number=asset.bitmapData.height;
  for(var i:int=0;i<countIcons;i++)
  {
    var bmp:BitmapData=new BitmapData(iconWidth, iconWidth);
    bmp.copyPixels(asset.bitmapData, new Rectangle(iconWidth*i, 0, iconWidth, iconWidth), new Point(0, 0));
    images.push(bmp);
  }                       
}


nOobCrafter 07.09.2009 18:48

wvxvw нет то что писать их придется это однозначно) сами они в проекте не появятся..просто думал может есть какой нить вариант с хмлем или типа того, задал имена, задал шаблонные именна классов и пустил генерацию в цикле. Пока что меня больше всего смущает то что каждая иконка определяется как класс и обьявляется видимой всему проекту, этого я немогу сделать и это меня заводит в тупик непонимания.
Смущает именно наличие большого куска однотипных операций, как будто у меня есть 20 кнопок и я для каждой отдельно прописываю одно и тоже действие...
gnus а если я сделаю внешний файл-хмл, и в него все запихаю, а потом по загрузке рассортирую в массив, по идее результат будет тот же?... зачем тогда столько телодвижений?

gnus 07.09.2009 18:58

мы про Embed говорим или про загрузку XML?

nOobCrafter 08.09.2009 11:24

gnus Embed... а по другому встроить никак не получится?...Тогда извиняюсь я думал что реально и так как я описал выше.

gnus 08.09.2009 12:54

почему по другому не получится? это просто 1 из вариантов, который я использую. придумай другой и реализуй.

Alex Lexcuk 08.09.2009 16:38

Пишите блокнотом bat файл, к примеру такой
Код:

dir >fileList.txt
Кидаете его в папочку с рисунками, кликаете на нем два раза. Получаете файл вот такой
Код:

Том в устройстве D не имеет метки.
 Серийный номер тома: D05D-7699

 Содержимое папки D:\FLEX\RoadX\resource

21.08.2009  14:59    <DIR>          .
21.08.2009  14:59    <DIR>          ..
...
...
...
21.08.2009  13:43            16*361 рис_авария_дым.jpg
21.08.2009  13:45            16*362 рис_авария_много.jpg
21.08.2009  13:46            16*027 рис_авария_непонятки.jpg

              58 файлов      7*464*793 байт
              3 папок  8*734*277*632 байт свободно

Ну и флеш 10 програмулю небольшую
Код AS3:

package  
{
        import flash.display.*;
        import flash.events.Event;
        import flash.net.*;
        import flash.utils.ByteArray;
 
        /**
        * ...
        * @author http://www.murmadillo.tut.su/
        */

        public class DocFileListPic extends Sprite
        {
                private var urlLoader:URLLoader;
 
                public function DocFileListPic()
                {
                        urlLoader = new URLLoader();
                        urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
                        urlLoader.addEventListener(Event.COMPLETE, phpUrlLoaderCompleteHandler);
                        urlLoader.load(new URLRequest('fileList.txt'));
                }
 
                private function phpUrlLoaderCompleteHandler(evt:Event):void {
                        var i:int;
                        var loadStr:String = new String(urlLoader.data);
 
                        var pattern:RegExp = /рис_.*/;
                        var result:Object;
                        var strUnSort:String = new String(urlLoader.data);
                        //replase spec symbol
 
                        //trace(loadStr);
                        var pictureArr:Array = loadStr.split("\r");
 
                        //var correctArr:Array = [];
                        var picArr:Array = [];
                        for (i = 0; i < pictureArr.length - 1; i++) {
                                result = pattern.exec(pictureArr[i]);
                                //trace(result);
                                if (result!=null) picArr.push(result.toString());
                        }
                        trace(picArr);
                        //имена файлов загружены - запускаем автоембедер
 
                        var autoEmStr:String = 'package resource '+
                        '{ \n\tpublic class BmpPicS {\n ' ;
                        for (i = 0; i < picArr.length; i++) {
                                autoEmStr += '\t\t[Embed(source = "' +
                                picArr[i] + '")]\n\t\private var pic_' + i + ':Class;\n\n';
                        }
 
                        autoEmStr += '\t\tpublic var bmpPicArr:Vector.<Bitmap>;\n\n\t\tpublic function BmpPicS(){\n\t\t' +
                        'bmpPicArr = new Vector.<Bitmap>();\n\n\t\t' +
                        'var i:int;\n\t\t' +
                        'for (i=0;i<' + i + ';i++)\n\t\t\t' +
                        'bmpPicArr[i]=new ["pic_"+i]().bitmapData;\n';
                        autoEmStr += '\t\t}\n\t}\n}';
 
                        var fileReference:FileReference = new FileReference();
                        fileReference.save(autoEmStr, 'BmpPicS.as');
                }
 
 
        }
 
}

запускаем - сохраняем
Код AS3:

package resource { 
        import flash.display.*;
 
        public class BmpPicS {
                [Embed(source = "рис_7.jpg")]
        private var pic_0:Class;
 
...
...
...
...
...
                [Embed(source = "рис_мотыки.jpg")]
        private var pic_12:Class;
 
                [Embed(source = "рис_параход.jpg")]
        private var pic_13:Class;
 
                [Embed(source = "рис_пузо.jpg")]
        private var pic_14:Class;
 
                [Embed(source = "рис_рокс.jpg")]
        private var pic_15:Class;
 
                [Embed(source = "рис_сижу.jpg")]
        private var pic_16:Class;
 
                [Embed(source = "рис_синий_зонтик.jpg")]
        private var pic_17:Class;
 
 
        public var bmpPicArr:Vector.<BitmapData>;
 
        public function BmpPicS(){
                bmpPicArr = new Vector.<BitmapData>();
 
                var i:int;
                for (i=0;i<24;i++)
                        bmpPicArr[i]=new this["pic_"+i]().bitmapData;
                }
        }
}


nOobCrafter 08.09.2009 20:39

Alex Lexcuk, омг, спс большое имено это я и хотел:
Код AS3:

for (i = 0; i < picArr.length; i++) {
        autoEmStr += '\t\t[Embed(source = "' +
        picArr[i] + '")]\n\t\private var pic_' + i + ':Class;\n\n';
}



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

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