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:\Users\dzq\Desktop\test.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     }

 

posted @ 2013-12-01 23:26  actionkong  阅读(1218)  评论(0编辑  收藏  举报