AS3 CookBook学习整理(二)

来源:互联网 发布:网络媒介类型 编辑:程序博客网 时间:2024/05/14 13:51

1. 我要改变影片的对齐方式

解决方法:
使用stage.align属性。
stage.align的值是flash.display.StageAlign类的一个枚举。其值如下:

ValueVertical AlignmentHorizontal
StageAlign.TOPTopCenter
StageAlign.BOTTOMBottomCenter
StageAlign.LEFTCenterLeft
StageAlign.RIGHTCenterRight
StageAlign.TOP_LEFTTopLeft
StageAlign.TOP_RIGHTTopRight
StageAlign.BOTTOM_LEFTBottomLeft
StageAlign.BOTTOM_RIGHTBottomRight

Example:

  1. package
  2. {
  3.     import flash.display.Sprite;
  4.     import flash.display.StageAlign;
  5.     import flash.display.StageScaleMode;
  6.     public class Sample1105 extends Sprite
  7.     {
  8.         public function Sample1105()
  9.         {
  10.             stage.scaleMode = StageScaleMode.NO_SCALE;
  11.             stage.align = StageAlign.TOP_RIGHT;
  12.             
  13.             this.graphics.beginFill(0xFF0000);
  14.             this.graphics.drawRect(10,10,stage.stageWidth,stage.stageHeight);
  15.             this.graphics.endFill();            
  16.         }
  17.     }
  18. }

2. 确定客户端是否能播放音频

解决方法:
使用flash.system.Capabilities的hasAudio判断是否支持音频,hasMP3判断是否能播放MP3

Example:

  1. if(flash.system.Capabilities.hasAudio && flash.system.Capabilities.hasMP3){}
  2. else{}

3. 提示用户改变播放器设置

解决方法:
使用flash.system.Security.showSettings()方法打开用户的Flash播放器设置对话框窗口

该方法接受一个flash.system.SecurityPanel枚举作为参数。对应功能如下:

SecurityPanel.DEFAULT    默认面板

SecurityPanel.CAMERA    摄像头面板

SecurityPanel.LOCAL_STORAGE    本地存储面板

SecurityPanel.MICROPHONE    话筒面板

SecurityPanel.PRIVACY    安全控制面板

SecurityPanel.SETTINGS_MANAGER    管理面板会打开浏览器进行更多设置

Example:

  1. package {
  2.     import flash.display.Sprite;
  3.     import flash.system.Security;
  4.     import flash.system.SecurityPanel;
  5.     public class Sample1117 extends Sprite
  6.     {
  7.         public function Sample1117()
  8.         {
  9.             flash.system.Security.showSettings(flash.system.SecurityPanel.DEFAULT);
  10.         }
  11.     }
  12. }

4. 对数值进行四舍五入或取近似值

解决方法:
用Math.round()进行四舍五入,Math.floor()和Math.ceil()进行上下近似值。NumberUtilities.round()方法可自定义取值。

Example:

  1. package {
  2.     import ascb.util.NumberUtilities;
  3.     
  4.     import flash.display.Sprite;
  5.     public class Sample1117 extends Sprite
  6.     {
  7.         public function Sample1117()
  8.         {
  9.             trace(Math.round(234.56));  //235
  10.             trace(Math.floor(234.56));  //234;
  11.             trace(Math.ceil(234.56));   //235;
  12.             
  13.             trace(Math.round(123.456*100)/100); //123.46;
  14.             //也有一种写法,可读性比上面好
  15.             trace(Math.round(123.456/0.1)*0.1); //123.5;
  16.             //第三方函数的方法,实现机制其实和上面一样
  17.             trace(NumberUtilities.round(123.456,0.1));  //123.5
  18.             trace(NumberUtilities.round(123.456,6));    //126;
  19.             
  20.         }
  21.     }
  22. }

5. 对数字和字符串进行格式化

解决方法:
用NumberFormat对象的format()与currencyFormat()方法。由于是第三方类库,测试过程中发现有些不完善。自己写了一个格式化货币的方法。

Example:

  1. package {
  2.     import flash.display.Sprite;
  3.     
  4.     public class Sample1118 extends Sprite
  5.     {
  6.         public function Sample1118()
  7.         {
  8.             var money:Number = 26591234569.5678;
  9.             trace(formatString(money)); //26,591,234,569.57
  10.             var i:int = 1234;
  11.             trace(formatString(i)); //1,234.00
  12.             trace(formatString("fox"));
  13.         }
  14.         private function formatString(obj:Object):String
  15.         {
  16.             if(obj is int||obj is uint||obj is Number)
  17.             {
  18.                 var money:Number = obj as Number;
  19.                 var str:String = (Math.round(money/0.01) * 0.01).toString();
  20.                 var _index:int = str.indexOf(".");
  21.                 var cursor:int = 0;
  22.                 if(_index>-1)
  23.                 {
  24.                     cursor = _index;
  25.                     str = str.substring(0,_index + 3);
  26.                     while(str.length < _index+3)
  27.                     {
  28.                         str = str + "0";
  29.                     }           
  30.                 }
  31.                 else
  32.                 {
  33.                     cursor = str.length;
  34.                     str = str+".00";
  35.                 }
  36.                 var arrStr:Array = new Array();
  37.                 while(cursor-3>=0)
  38.                 {
  39.                     arrStr.push(str.substr(cursor-3,3));
  40.                     cursor = cursor-3;
  41.                 }
  42.                 if(cursor>0)
  43.                 {
  44.                     arrStr.push(str.substr(0,cursor));
  45.                 }
  46.                 arrStr.reverse();
  47.                 return arrStr.join(',') + str.substr(str.indexOf("."));
  48.             }
  49.             else
  50.             {
  51.                 return obj.toString();
  52.             }
  53.         }   
  54.     }
  55. }

6. 生成随机数(猜硬币)

解决方法:
用NumberUtilities.random(0,1)方法产生随机数

Example:

  1. package {
  2.     import ascb.util.NumberUtilities;
  3.     
  4.     import flash.display.Sprite;
  5.     import flash.events.MouseEvent;
  6.     import flash.text.TextField;
  7.     
  8.     public class Sample1118 extends Sprite
  9.     {   
  10.         private var label:TextField;
  11.         public function Sample1118()
  12.         {
  13.             label = new TextField();
  14.             label.background = true;
  15.             label.backgroundColor = 0xFF0000;
  16.             label.textColor = 0xF7FCFF;
  17.             label.autoSize = "left";
  18.             this.addChild(label);
  19.             var sprite:Sprite = new Sprite();
  20.             sprite.graphics.beginFill(0xFFFF00);
  21.             sprite.graphics.drawCircle(100,100,50);
  22.             sprite.graphics.endFill();
  23.             sprite.addEventListener(MouseEvent.CLICK,OnClick);
  24.             this.addChild(sprite);
  25.         }
  26.         private function OnClick(event:MouseEvent):void
  27.         {
  28.             if(NumberUtilities.random(0,1)==0)
  29.             {
  30.                 label.text = "正面";
  31.             }
  32.             else
  33.             {
  34.                 label.text = "背面";
  35.             }
  36.         }
  37.     }
  38. }

7. 生成随机数(骰子)

解决方法:
用NumberUtilities.random(1,6)方法产生随机数

Example:

  1. package {
  2.     import ascb.util.NumberUtilities;
  3.     import flash.display.Sprite;
  4.     import flash.events.MouseEvent;
  5.     public class Sample1119 extends Sprite
  6.     {   
  7.         private var sprite:Sprite;
  8.         public function Sample1119()
  9.         {
  10.             sprite = new Sprite();
  11.             this.addChild(sprite);
  12.             sprite.addEventListener(MouseEvent.CLICK,OnClick);
  13.             OnClick(null);  //第一次显示出来       
  14.         }
  15.         
  16.         private function OnClick(event:MouseEvent):void
  17.         {
  18.             sprite.graphics.clear();
  19.             sprite.graphics.beginFill(0xFFFFFF);
  20.             sprite.graphics.drawRect(0,0,50,50);
  21.             sprite.graphics.endFill();
  22.             var randNum:int = NumberUtilities.random(1,6);
  23.             sprite.graphics.beginFill(0x000000);
  24.             if(randNum==1)
  25.             {       
  26.                 sprite.graphics.drawCircle(25,25,6);
  27.             }
  28.             else if(randNum!=2)
  29.             {
  30.                 sprite.graphics.drawCircle(8,8,6);
  31.                 sprite.graphics.drawCircle(42,42,6);
  32.             }
  33.             if(randNum==3||randNum==5)
  34.             {
  35.                 sprite.graphics.drawCircle(25,25,6);                
  36.             }
  37.             if(randNum==4||randNum==5||randNum==6)
  38.             {
  39.                 sprite.graphics.drawCircle(42,8,6); 
  40.                 sprite.graphics.drawCircle(8,42,6);
  41.             }
  42.             if(randNum==2)
  43.             {
  44.                 sprite.graphics.drawCircle(25,8,6);
  45.                 sprite.graphics.drawCircle(25,42,6);            
  46.             }
  47.             if(randNum==6)
  48.             {
  49.                 sprite.graphics.drawCircle(8,25,6);
  50.                 sprite.graphics.drawCircle(42,25,6);
  51.             }
  52.             sprite.graphics.endFill();
  53.         }
  54.     }
  55. }

8. 生成唯一随机数(基于毫秒)

解决方法:
调用NumberUtilities.getUnique()得到当前时间(精确到毫秒)的唯一数字

Example:

  1. package {
  2.     import ascb.util.NumberUtilities;
  3.     
  4.     import flash.display.Sprite;
  5.     public class Sample1119 extends Sprite
  6.     {   
  7.         public function Sample1119()
  8.         {
  9.             for(var i:uint=0;i<10;i++)
  10.             {
  11.                 trace(NumberUtilities.getUnique());
  12.             }
  13.         }
  14.     }
  15. }

9. 计算两点之间的距离

解决方法:
根据勾股定理,使用Math.pow()和Math.sqrt()联合计算

Example:

  1. package {   
  2.     import flash.display.Sprite;
  3.     import flash.geom.Point;
  4.     public class Sample1119 extends Sprite
  5.     {   
  6.         public function Sample1119()
  7.         {
  8.             var p1:Point = new Point(10,20);
  9.             var p2:Point = new Point(100,200);
  10.             var x:int = p1.x - p2.x;
  11.             var y:int = p1.y = p2.y;
  12.             var length:Number = Math.sqrt(Math.pow(x,2)+Math.pow(y,2));
  13.             trace(length);
  14.         }
  15.     }
  16. }

10. DisplayObject类结构图

说明:
flash.display包中包含Flash Player用于构建可视显示内容的核心类。DisplayObject类是可放在显示列表中的所有对象的基类。

原创粉丝点击