Onelong

分享知识,与你一起进步......
RSS icon Home icon
  • ANE的那些事情

    post by onelong / 2014-1-19 18:49 Sunday [MXML/ActionScript3.0]

    最近接了一些事情,做ANE的。大学那些年弄过一些flash,flex,但是最后并没有选择他作为自己的职业,原本以为与Flash AIR无缘了,最近一师弟介绍我做ANE,没有接触过,其实我真的没有信心,后来花了一天,做了一个ANE的demo,弄明白了各种流程和注意事项。于是就接下来做了,毕竟是没有经验呀,很多东西都不懂,也没有去找Adobe的官方文档。遇到很多纠结的事情,如资源问题,第三方jar的问题,回调问题,数据类型映射问题等。开始的时候在9ria上面找到一些文字和总结。

    阅读全文>>

  • ActionScript3 加载本地图片

    post by onelong / 2010-4-23 23:31 Friday [MXML/ActionScript3.0]
    下面有个小小的例子:
    package
    {
    	import flash.display.Bitmap;
    	import flash.display.BitmapData;
    	import flash.display.Loader;
    	import flash.display.Sprite;
    	import flash.display.StageAlign;
    	import flash.display.StageScaleMode;
    	import flash.events.Event;
    	import flash.events.MouseEvent;
    	import flash.net.FileReference;
    	import flash.text.TextField;
    	import flash.text.TextFieldAutoSize;
    	import flash.text.TextFieldType;
    	
    	public class Browse extends Sprite
    	{
    		private var file:FileReference=new FileReference();
    		private var loader:Loader=new Loader();
    		private function onClick(event:MouseEvent):void
    		{
    			var f:FileFilter=new FileFilter
                            ("Images", "*.jpg;*.gif;*.png");
    			file.browse([f]);
    			file.addEventListener(Event.SELECT,onSelect);
    		}
    		private function onSelect(event:Event):void
    		{
    			file.load();
    			file.addEventListener(Event.COMPLETE,onComplete);
    			file.removeEventListener(Event.SELECT,onSelect);
    		}
    		private function onComplete(event:Event):void
    		{
    			file.removeEventListener(Event.COMPLETE,onComplete);
    			loader.loadBytes(file.data);
    			loader.contentLoaderInfo.
                            addEventListener(Event.COMPLETE,onLoadComplete);
    		}
    		private function onLoadComplete(event:Event):void
    		{
    			var tempData:BitmapData=new BitmapData   
                              (loader.width,loader.height,false);
    			tempData.draw(loader);
    			var bitmap:Bitmap=new Bitmap(tempData);
    			bitmap.y=50;
    			this.addChild(bitmap);
    			loader.contentLoaderInfo.removeEventListener(
                            Event.COMPLETE,onLoadComplete);
    		}
    		public function Browse()
    		{
    			stage.align=StageAlign.TOP_LEFT;
    			stage.scaleMode=StageScaleMode.NO_SCALE;
    			var button:TextField=new TextField();
    			button.autoSize=TextFieldAutoSize.CENTER;
    			button.text="打开文件";
    			button.border=true;
    			this.addChild(button);
    			button.addEventListener(MouseEvent.CLICK,onClick);
    		}
    	}
    }
    
    


     

    阅读全文>>

  • ActionScript3 做个简单的图片压缩

    post by onelong / 2010-4-19 16:57 Monday [MXML/ActionScript3.0]
    源码如下:
    package
    {
    	import flash.display.Bitmap;
    	import flash.display.BitmapData;
    	import flash.display.Loader;
    	import flash.display.Sprite;
    	import flash.display.StageAlign;
    	import flash.display.StageScaleMode;
    	import flash.events.Event;
    	import flash.events.MouseEvent;
    	import flash.geom.Matrix;
    	import flash.net.FileReference;
    	import flash.net.URLRequest;
    	import flash.utils.ByteArray;
    	
    	public class JPG extends Sprite
    	{
    		private var bmpData:BitmapData;
    		private var loader:Loader;
    		private var targetWidth:uint=100;//缩放后图片的宽度
    		private var targetHeight:uint=100;//缩放后图片的高度
    		public function JPG()
    		{
    			init();
    		}
    		private function init():void{
    			stage.scaleMode=StageScaleMode.NO_SCALE;
    			stage.align=StageAlign.TOP_LEFT; 
    			
    			loader = new Loader();
    			loader.load(new URLRequest("2.jpg")); 
    			loader.contentLoaderInfo.addEventListener
                           (Event.COMPLETE, completeHandler); 
    
    			
    		}
    		private function completeHandler(event:Event):void{ 
    			var LW:uint=loader.width;
    			var LH:uint=loader.height;
    			loader.scaleX=targetWidth/LW;
    			loader.scaleY=targetHeight/LH; 
    			var sprite:Sprite=new Sprite();
    			sprite.addChild(loader);
    			addChild(sprite);
    			bmpData = new BitmapData(sprite.width,sprite.height);
    			bmpData.draw(sprite); 
    			var bmp:Bitmap = new Bitmap(bmpData);
    			stage.addEventListener(MouseEvent.CLICK,onClick);
    			this.addChild(bmp);
    		} 
    		private function onClick(evt:MouseEvent):void{
    			
    			var jpg:ByteArray=new JPGEncoder(80).encode(bmpData);
    			new FileReference().save(jpg,"ggg.jpg");
    		}
    	}
    }
    
    

    其实draw方法还可以用来做截图的!!

    阅读全文>>

  • ActionScript3实现一个简单mp3播放器

    post by onelong / 2010-4-14 23:30 Wednesday [MXML/ActionScript3.0]

    使用ActionScript3做一个播放器是一个相当容易的事情!看看adobe帮助的入门例子;播放音乐使用了Sound类,控制声音使用SoundChannel类,控制声音大小声道等使用SoundTransform类
    下面看看例子啦!
    package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;

    public class Test extends Sprite {
    private var snd:Sound = new Sound();
    private var channel:SoundChannel = new SoundChannel();
    private var button:TextField = new TextField();
    private var stopbtn:TextField = new TextField();
    private var sprite:Sprite=new Sprite();
    private var pausePosition:Number=0;

    public function Test() {
    init();
    }
    private function init():void{
    var req:URLRequest = new URLRequest("22.mp3");//声音文件的地址....
    snd.load(req);

    button.x = 10;
    button.y = 10;
    button.text = "PLAY";
    button.border = true;
    button.background = true;
    button.selectable = false;
    button.autoSize = TextFieldAutoSize.CENTER;
    button.addEventListener(MouseEvent.CLICK, clickHandler);

    this.addChild(button);

    stopbtn.x = 60;
    stopbtn.y = 10;
    stopbtn.text = "STOP";
    stopbtn.border = true;
    stopbtn.background = true;
    stopbtn.selectable = false;
    stopbtn.autoSize = TextFieldAutoSize.CENTER;
    stopbtn.addEventListener(MouseEvent.CLICK, stophandle);

    this.addChild(stopbtn);

    sprite.graphics.beginFill(0);
    sprite.graphics.drawRect(10,30,100,4);
    sprite.graphics.endFill();
    sprite.scaleX=0;
    this.addChild(sprite);

    this.addEventListener(Event.ENTER_FRAME,onEnterFrame);
    }
    private function clickHandler(e:MouseEvent):void {
    if(button.text == "PLAY") {
    channel = snd.play(pausePosition);
    pausePosition = channel.position;
    channel.addEventListener(Event.SOUND_COMPLETE,soundCompele);
    this.addEventListener(Event.ENTER_FRAME,onEnterFrame);
    button.text = "PAUSE";
    }
    else {
    pausePosition = channel.position;
    channel.stop();
    button.text = "PLAY";
    this.removeEventListener(Event.ENTER_FRAME,onEnterFrame);
    }
    }
    private function stophandle(e:MouseEvent):void {
    channel.stop();
    pausePosition = 0;
    button.text = "PLAY";
    this.removeEventListener(Event.ENTER_FRAME,onEnterFrame);
    sprite.scaleX=0;
    }
    private function soundCompele(e:Event):void {
    channel.stop();
    pausePosition = 0;
    button.text = "PLAY";
    this.removeEventListener(Event.ENTER_FRAME,onEnterFrame);
    sprite.scaleX=0;
    }
    private function onEnterFrame(e:Event):void {
    sprite.scaleX=channel.position/snd.length;
    }
    }
    }

     

  • ActionScript3 修改右键菜单的方法

    post by onelong / 2010-4-14 23:15 Wednesday [MXML/ActionScript3.0]

    方法一:
    var zcd:ContextMenu=new ContextMenu();//上下文菜单
    zcd.hideBuiltInItems();//隐藏所有右键菜单
    zcd.builtInItems.print=true;//显示打印菜单
    this.contextMenu=zcd;

    方法二:
     var zcd:ContextMenu=new ContextMenu();//上下文菜单
    var nzcd:ContextMenuBuiltInItems=new ContextMenuBuiltInItems();
    nzcd.print=false;//隐藏打印菜单
    nzcd.quality=false;//隐藏品质菜单
    zcd.builtInItems=nzcd;
    this.contextMenu=zcd;

    this.stage.showDefaultContextMenu=false;//隐藏右键菜单

    方法三:
    var zcd:ContextMenu=new ContextMenu();//上下文菜单
    zcd.hideBuiltInItems();//隐藏所有右键菜单
    this.contextMenu=zcd;//重新赋值,改变右键菜单

    方法四:
    var zcd:ContextMenu=new ContextMenu();//上下文菜单
    zcd.builtInItems.print=false;//隐藏所有右键菜单
    this.contextMenu=zcd;

    自定义菜单:
     

    阅读全文>>

  • BitmapData draw()方法

    post by onelong / 2010-4-6 23:12 Tuesday [MXML/ActionScript3.0]

    BitmapData draw()方法 是flash用来捕获原始BitmapData数据的一个方法,具体说明请查看adobe官方帮助!
    下面看看这个例子吧!
    var shp:Shape=new Shape();//定义一个图形实例
    shp.graphics.beginFill(0xFF0000);//填充为红色
    shp.graphics.drawCircle(20,20,20);//图形里面画一个园,圆点(20,20),半径20
    var bmd:BitmapData=new BitmapData(300,300,false,0);//定义一个位图数据
    var bmp:Bitmap=new Bitmap(bmd);//新建一个位图
    addChild(bmp);//把位图加入显示列表

    阅读全文>>

  • BitmapData ColorTransform()方法的基础

    post by onelong / 2010-4-3 20:10 Saturday [MXML/ActionScript3.0]

    首先看看官方的帮助吧!
    可使用 ColorTransform 类调整显示对象的颜色值。可以将颜色调整或颜色转换应用于所有四种通道:红色、绿色、蓝色和 Alpha 透明度。
    当 ColorTransform 对象应用于显示对象时,将按如下方法为每个颜色通道计算新值:

    阅读全文>>

  • 基于 BitmapData hitTest的碰撞检测

    post by onelong / 2010-4-2 21:16 Friday [MXML/ActionScript3.0]

    在《making things move》(flash动画基础教程)中提到了基于hitTestObject()和hitTestPoint()的碰撞,和基于距离的碰撞!这些碰撞有明显的不足,hitTestObject()只能准确的检测出矩形的碰撞,然而除了矩形外的对象它是无法准确地检测出来的!hitTestPoint()可以检测对象和某点的碰撞!然而不规则图形的碰撞检测成为难点,基于距离的碰撞检测比较适用于球体和圆形的碰撞检测!是不是对不规则图形的碰撞检测就不可以显示了呢?当然不是啦!《flash动画高级教程》就是使用了BitmapData hitTest()完美地实现不规则的碰撞,当然这种方法也有局限的!他是BitmapData的方法并不是MovieClip的方法,既然是BitmapData的方法检测位图的碰撞当然没问题了!可是如果不是位图而是影片剪辑呢?当然这不是问题!只要小作修改即可实现了!BitmapData 的draw()异常的强大!
    hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1)

    阅读全文>>

  • as3 BitmapData 基础应用

    post by onelong / 2010-4-2 20:44 Friday [MXML/ActionScript3.0]

    从adobe的帮助文档可以了解到 BitmapData 类是用来处理 Bitmap 对象的位图图像的数据(像素)。可以使用 BitmapData 类的方法创建任意大小的透明或不透明位图图像,并在运行时采用多种方式操作这些图像。也可以访问使用 flash.display.Loader 类加载的位图图像的 BitmapData。此类允许您将位图呈现操作与 Flash Player 的内部显示更新例程分隔开来。通过直接操作 BitmapData 对象,您可以创建复杂的图像,不会因连续重新绘制矢量数据的内容而产生每帧开销。BitmapData 类的方法支持通过可用于非位图显示对象的滤镜无法得到的效果。BitmapData 对象包含像素数据的数组。此数据可以表示完全不透明的位图,或表示包含 Alpha 通道数据的透明位图。以上任一类型的 BitmapData 对象都作为 32 位整数的缓冲区进行存储。每个 32 位整数确定位图中单个像素的属性。每个 32 位整数都是四个 8 位通道值(从 0 到 255)的组合,这些值描述像素的 Alpha 透明度以及红色、绿色、蓝色 (ARGB) 值。(对于 ARGB 值,最高有效字节代表 Alpha 通道值,其后的有效字节分别代表红色、绿色和蓝色通道值。)将这四个通道(Alpha、红色、绿色和蓝色)与 BitmapData.copyChannel() 方法或 DisplacementMapFilter.componentX 及 DisplacementMapFilter.componentY 属性一起使用时,这些通道以数字形式表示,并且这些数字在 BitmapDataChannel 类中由以下常量表示:
    BitmapDataChannel.ALPHA
    BitmapDataChannel.RED
    BitmapDataChannel.GREEN
    BitmapDataChannel.BLUE
    通过使用 Bitmap 对象的 bitmapData 属性,可以将 BitmapData 对象附加到 Bitmap 对象。可以使用 Graphics.beginBitmapFill() 方法用 BitmapData 对象填充 Graphics 对象。
    说了那么多,也是时候说说它到底是怎样用的了!如:
    var myBitmapData:BitmapData = new BitmapData(200, 100, false, 0xff0000);//新建一个宽200像素高100像素背景为红色的位图数据
    var myBitmap:Bitmap = new Bitmap(myBitmapData);//新建位图
    addChild(myBitmap);把位图加入显示列表中!
    就这样简单就在flash中新建了一个位图!也是有人会问这和Graphics里的方法有什么不同呢?呵呵
    BitmapData 类提供了许多方法,还支持强大的滤镜!
    例如

     

    阅读全文>>

  • Loader、URLLoader、URLStream

    post by onelong / 2010-4-1 21:57 Thursday [MXML/ActionScript3.0]

    Loader、URLLoader、URLStream  

    (1)  Loader   
     
    Loader 类可用于加载 SWF 文件或图像(JPG、PNG 或 GIF)文件。 使用 load() 方法来启动加载。 被加载的显示对象将作为 Loader 对象的子级添加。   
     
    (2) URLLoader   
     
    URLLoader 类以文本、二进制数据或 URL 编码变量的形式从 URL 下载数据。 在下载文本文件、XML 或其它用于动态数据驱动应用程序的信息时,它很有用。   
     
    URLLoader 对象会先从 URL 中下载所有数据,然后才将数据用于 ActionScript。 它会发出有关下载进度的通知,通过 bytesLoaded 和bytesTotal 属性以及已调度的事件,可以监视下载进度。  
     
    在加载非常大的视频文件(如 FLV 的视频文件)时,可能会出现内存不足错误。   
     
    (3) URLStream   
     
    URLStream 类提供对下载 URL 的低级访问。 数据一下载,便可随即为应用程序使用,这和使用 URLLoader 时需要等到整个文件下载完不同。并且 URLStream 类还允许在完成下载前关闭流。 已下载文件的内容将作为原始二进制数据提供。   
      在 URLStream 中的读取操作是非阻塞模式的。 这意味着您在读取数据之前必须使用 bytesAvailable 属性来确定是否能够获得足够的数据。如果不能获得足够的数据,将引发 EOFError 异常。  
    在默认情况下,所有二进制数据都是以 Big-endian 格式编码的,并且最高位字节于第一位。   

    阅读全文>>

  • acstionscript3动画的实用公式

    post by onelong / 2010-3-31 2:29 Wednesday [MXML/ActionScript3.0]

    基础三角函数的计算:
    角的正弦值 = 对边 / 斜边
    角的余弦值 = 邻边 / 斜边
    角的正切值 = 对边 / 邻边

    弧度转换为角度以及角度转换为弧度:
    弧度 = 角度 * Math.PI / 180
    角度 = 弧度 * 180 / Math.PI

    阅读全文>>

  • flash player 9 垃圾收集器

    post by onelong / 2010-3-28 5:14 Sunday [业界]

    ActionScript3.0,引入AVM2之后,ActionScript3.0在执行速度上有了很大提高,所以使支持更复杂的组件成为可能。它引入了E4Xsocketsbyte 数组对象、新的显示列表模型、正则表达式、正式化的事件和错误模型以及其它特性,它是一个令人炫目的大杂烩。巨大的能力意味着巨大的责任,这对ActionScript3.0来说一点没错。引入这些新控件带来一个副作用:垃圾收集器不再支持自动为你收集垃圾等假设。也就是说Flash开发者转到ActionScript3.0之后需要对关于垃圾收集如何工作以及如何编程使其工作更加有效具备较深入的理解。没有这方面的知识,即使创建一个看起来很简单的游戏或应用程序也会出现SWF文件内存泄露、耗光所有系统资源(CPU/内存)导致系统挂起甚至机器重启。  要理解如何优化你的ActionScript3.0代码,你首先要理解垃圾收集器如何在FlashPlayer 9中工作。Flash有两种方法来查找非活动对象并移除它们。 
    关于垃圾收集器  垃圾收集器是一个后台进程它负责回收程序中不再使用的对象占用的内存。非活动对象就是不再有任何其他活动对象引用它。为便于理解这个概念,有一点非常重要,就是要意识到除了非原生类型(Boolean, String, Number, uint, int除外),你总是通过一个句柄访问对象,而非对象本身。当你删除一个变量其实就是删除一个引用,而非对象本身。  以下代码很容易说明这一点:   ActionScript代码

    阅读全文>>