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

grunerasta 27.11.2007 16:22

Заэмбедить спрайт - очередной вопрос удобства
 
В as есть такая конструкция:

Код:

                [Embed(source="assets/elka.png")]
                public static const elka:Class;

Эмбедит картинки, чтобы эту картинку вставить (а картинка юзается в нескольких местах), мне пришлось написать вот такую жесть:

Код:

                        var btme:BitmapAsset=new elka() as BitmapAsset;
                        var btmDatae:BitmapData=new BitmapData(btme.width,btme.height,true,0);
                        btmDatae.draw(btme);
                        var matrix:Matrix=new Matrix();
                        matrix.tx=0-btme.width/2-4;
                        matrix.ty=-btme.height+20;
                        sprite.graphics.lineStyle(0,0,0);
                        sprite.graphics.beginBitmapFill(btmDatae,matrix,false,true);
                        sprite.graphics.drawRect(matrix.tx,matrix.ty,btme.width,btme.height);

А для чистоты кода хочу чтобы был статический класс с графикой, который сразу выдает спрайты, понятно что такая конструкция дать этого не может. Вопрос стандартный - что делать?

etc 27.11.2007 16:45

Это не в AS, а во Flex исключительно.
В CS3 используется иная схема.

Зачем в вашем коде промежуточный битмап — непонятно.

grunerasta 27.11.2007 16:50

Ну так оно работает, как в хелпе написано, а как без битмапа сделать?

etc 27.11.2007 16:55

А вы узнайте, что такое BitmapAsset и какие у него свойства есть.

grunerasta 27.11.2007 17:02

Круто, у него есть свойство bitmapData, 2 строки порезал, спасибо.

Но вопрос остается в силе.

etc 27.11.2007 17:41

Написать стат. метод, возвращающий спрайт.

silin 27.11.2007 20:32

или я недопонял чего или автор не умеет сказать чего хочет или тут какая-то тень на плетень наводится..
а почему по по простому-то нельзя?
Код:

package{
        import flash.display.Sprite;
       
        public class Main extends flash.display.Sprite{
                public function Main():void        {
                        var elka:Elka=new Elka();
                        addChild(elka);
                }
        }
}

import flash.display.Sprite;
import flash.display.Bitmap;
class Elka extends Sprite{
        [Embed(source="elka.png")]
        public static const ElkaPNG:Class;
        public function Elka():void{
                var el:Bitmap=new ElkaPNG();
                addChild(el);
                el.x=-width/2-4;
                el.y=-height+20;
        }
}

дада, сори
никакой тени: "Написать стат. метод, возвращающий спрайт"
это уж кому чего надо
Код:

package{
        import flash.display.Bitmap;
        import flash.display.Sprite;
       
        public class Main extends flash.display.Sprite{
                [Embed(source="elka.png")]
                public static const ElkaPNG:Class;
                public function Main():void        {
                        var elka:Sprite=getElka();
                        addChild(elka);
                }
                public static function getElka():Sprite{
                        var sprite:Sprite=new Sprite();
                        var el:Bitmap=new ElkaPNG();
                        sprite.addChild(el);
                        el.x=-sprite.width/2-4;
                        el.y=-sprite.height+20;
                        return sprite;
                }
        }
}


artcraft 27.11.2007 22:21

я тоже не до конца понял в чём загвоздка,
но может это то что надо...
Код:

package packageName{
    import flash.display.Bitmap;
    import flash.utils.getDefinitionByName;
   
    public class Assets{
       
        [Embed(source="../../assets/icons/printer.png")]   
        public var PrinterIcon:Class;
        public static const PRINTER_ICON:String = 'PrinterIcon';

        [Embed(source="../../assets/icons/delete.png")]   
        public var DeleteIcon:Class;
        public static const DELETE_ICON:String = 'DeleteIcon';

      // и так далее...

        public static function getIt(name:String):Bitmap{
            var ref:Class = getDefinitionByName('packageName::Assets_'+name) as Class;
            return new ref();       
        }
       
        function Assets(){}
    }
}

а потом просто вызывать
Код:

var icon:Bitmap = Assets.getIt(Assets.PRINTER_ICON);


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

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