Sprite表的创建与解释(使用)
使用Sprite表一般会生成两个文件,分别是.png文件和.xml文件。
1、创建 Sprite 表,请执行以下操作:
- 在库中选择一个或多个元件,或在舞台上选择一个或多个元件实例。所选内容还可以包含位图。
- 右键单击所选内容,然后选择“生成 Sprite 表”。
- 在“生成 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 }