• Sprite表的创建与解释(使用)


    使用Sprite表一般会生成两个文件,分别是.png文件和.xml文件。

    1、创建 Sprite 表,请执行以下操作:

    1. 中选择一个或多个元件,或在舞台上选择一个或多个元件实例。所选内容还可以包含位图。
    2. 右键单击所选内容,然后选择“生成 Sprite 表”
    3. “生成 Sprite 表”对话框中,选择选项,然后单击“导出”

    有下列导出选项可用:

    图像尺寸

    Sprite 表的总尺寸,以像素为单位。默认设置为“自动调整大小”,这将调整表的大小以容纳所包含的所有 Sprite。

    图像格式

    导出的 Sprite 表的文件格式。PNG 8 位和 PNG 32 位每个都支持使用透明背景(Alpha 通道)。PNG 24 位和 JPG 不支持透明背景。通常,PNG 8 位和 PNG 32 位之间的视觉差异很小。PNG 32 位文件大小是 PNG 8 位文件大小的 4 倍。

    边框填充

    Sprite 表单边缘的填充,以像素为单位

    形状填充

    Sprite 表中每个图像之间的填充,以像素为单位

    算法

    将图像打包到 Sprite 表所用的技术。有两个选项:

    • 基本(默认值)
    • MaxRects

    数据格式

    图像数据所用的内部格式。选择最适合导出后 Sprite 表预期工作流程的格式。默认为Starling 格式。

    旋转

    将 Sprite 旋转 90 度。此选项只适用于某些数据格式。

    裁切

    此选项通过修剪添加到表的每个元件帧的未使用像素,可以节省 Sprite 表上的空间。

    堆栈帧

    选择此选项可以防止在生成的 Sprite 表中复制选定元件中的重复帧。

     

    2、使用:从Sprite表中拿出需要的位图

     1 private function onXMLLoaded(xml:XML):void
     2             {
     3                 trace( xml.toString() );
     4                 
     5                 this.xml = xml;
     6                 parse();
     7             }
     8             
     9             private function onImageLoaded(bd:BitmapData):void
    10             {
    11                 var image:Image = new Image();
    12                 image.source = new Bitmap( bd );
    13                 addChild( image );
    14                 
    15                 this.bd = bd;
    16                 parse();
    17             }
    18             
    19             private function parse():void
    20             {
    21                 //需要两个文件同时存在才可以使用
    22                 if( !xml || !bd ) return;
    23                 
    24                 var list:XMLList = xml.SubTexture;
    25                 var n:int = list.length();
    26                 var item:XML;
    27                 for( var i:int = 0; i < n; i++ )
    28                 {
    29                     item = list[i];
    30                     // <SubTexture name="image 216.png" x="0" y="0" width="80" height="70" pivotX="0" pivotY="0"/>
    31                     var x:int = int( item.@x );
    32                     var y:int = int( item.@y );
    33                     var w:int = int( item.@width );
    34                     var h:int = int( item.@height );
    35                     
    36                     var destRect:Rectangle = new Rectangle(x,y,w,h);
    37                     var destPoint:Point = new Point(0,0);
    38                     
    39                     var newBD:BitmapData = new BitmapData(w,h);
    40                     
    41                     //复制Sprite表里面需要到的位图
    42                     newBD.copyPixels( bd, destRect, destPoint );
    43                     
    44                     //检查是否复制成功
    45                     /* var img:Image = new Image();
    46                     addChild( img );
    47                     img.source = new Bitmap( newBD ) ;
    48                     img.x = x;
    49                     img.y = y;
    50                     img.filters = [new GlowFilter()];  */
    51                 }
    52             }

    如果是air程序

     1 /**
     2              * 把小图数据存到桌面assets目录下面
     3              */
     4             private function saveBD(bd:BitmapData, name:String):void
     5             {
     6                 var ba:ByteArray = pngEnc.encode(bd);
     7                 
     8                 var file:File =  File.desktopDirectory.resolvePath("assets/" + name );
     9                 var fs:FileStream = new FileStream();
    10                 fs.open( file, FileMode.WRITE );
    11                 fs.writeBytes(ba);
    12                 fs.close();
    13             }

    在air程序里可以实现拖拽功能

    /**
                 * 拖拽功能,得到拖放进来的文件
                 */
                protected function nativeDragDropHandler(arr:Array):void
                {
                    
                    trace(File(arr[0]).nativePath);
                    var name:String = File(arr[0]).nativePath;
                    // C:UsersdzqDesktop	est.xml
                    name = name.substring(0, name.indexOf(".") );
                    trace(name);
                    
                    //置空,防止下次拖拽文件时,使用之前的.xml或.png文件
                    xml = null;
                    bd = null;
                    
                    LoaderHelper.loadXML( name + ".xml", onXMLLoaded );
                    LoaderHelper.loadImage( name + ".png", onImageLoaded );
                }
     1     public class NativeDragHelper
     2     {
     3         
     4         /**
     5          * NativeDragHelper.init(this, nativeDragDropHandler );
     6          * 
     7          * protected function nativeDragDropHandler(arr:Array):void
     8             {
     9                 
    10                 trace(File(arr[0]).nativePath);
    11             }
    12          * 
    13          */
    14         public static function init( target:InteractiveObject, nativeDragDropHandler:Function ):void
    15         {
    16             target.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, function(event:NativeDragEvent):void{
    17                 NativeDragManager.acceptDragDrop( target );
    18             });
    19             target.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, function(event:NativeDragEvent):void{
    20                 var arr:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
    21                 nativeDragDropHandler(arr);
    22             });
    23         }
    24     }
  • 相关阅读:
    1869六度分离
    1162Eddy's picture
    hdu2544
    3549Flow Problem
    1272小希的迷宫
    2112HDU Today(Dijkstra)
    1878欧拉回路
    hdu1116Play on Words
    2112HDU Today(SPFA)
    在程序中动态创建视图
  • 原文地址:https://www.cnblogs.com/actionkong/p/3453187.html
Copyright © 2020-2023  润新知