zoukankan      html  css  js  c++  java
  • 转:as3.0程序员常用的编程技巧

    错误处理try,catch,finally

    private function tryError():void{

        try {

            trace(”测试开始-try”);

            throwError();

        }catch(errObject:Error) {

            trace(”错误信息:” + errObject.message);

            trace(”测试结束-catch”);

            return;

        }finally{

            trace(”虽然catch里已经有return方法,但位于return方法后面的finally里的代码依然会被执行.其实无论return方法是在try里,还是catch里,finally里的代码始终会被执行”);

        }

        trace(”前面已经有return了,此处是不会再执行的.除非没有抛出错误,以使catch里的代码没有被执行”);

    }

    private function throwError():void{

        throw new Error(”抛出错误”);

    }

    for…in与for each…in的区别

    与for…in循环不同的是,for each…in循环中的迭代变量包含属性所保存的值,而不包含属性的名称(或主键,索引).

    命名包路径的小技巧

        使用相应于拥有者和相关项目的包名称会比较好.按惯例来讲,包名称的开头应该是逆向的网址名称.例如,如果Example Corp(examplecorp.com)写了一些ActionScript3.0类,就会把所有类放在com.examplecorp包内(或者 com.examplecorp的子包内).如此一来,如果英国有另一家Example Corp(examplecorp.co.uk)也写了一些ActionScript3.0类,只要使用包uk.co.examplecorp,就可确保 唯一性.

        当类属于特定应用程序的一部分时,就应该放在该应用程序特定的子包内.例如,Example Corp可能有个应用程序名叫WidgetStore.如果WidgetStore应用程序使用一个名为ApplicationManager的类,则此 类就应该放在com.examplecorp.widgetstore包内,或者位于该包的子包内.

        按惯例来说,包名称的开头是小写字母.

    隐式的取出方法(getter)和设定方法(setter)

    public function get count():uint {

        return _count;

    }

    public function set count(value:uint):uint {

        if(value < 100){

            _count = value;

        }else {

            throw Error();

        }

    }

    确保类是绝不会有子类,使用final

    final public class Example{}

    super关键字的使用

    super(); //父类的构造函数,只能在类实例构造函数内部使用

    super.propertyName; //调用父类的属性,属性需要声明为public或protected

    super.methodName(); //调用父类的方法,方法需要声明为public或protected

    建立常数,使用关键字const而不是var

    static public const EXAMPLE:String = “example”;

    检测播放器版本

    flash.system.Capabilities.version

    对于8.5版以前的任何Flash Player版本,这种方法都不适用.

    判断客户端系统

    flash.system.Capabilities.os

    检测播放器类型

    flash.system.Capabilities.playerType

    可能的值有:

    “StandAlone”,用于独立的 Flash Player

    “External”,用于外部的 Flash Player 或处于测试模式下

    “PlugIn”,用于 Flash Player 浏览器插件

    “ActiveX”,用于 Microsoft Internet Explorer 使用的 Flash Player ActiveX 控件

    检测系统语言

    flash.system.Capabilities.language

    判断用户是否启用了IME(输入法编辑器)

    flash.system.IME.enabled

    检测屏幕的分辨率

    flash.system.Capabilities.screenResolutionX

    flash.system.Capabilities.screenResolutionY

    把弹出窗口居中的算法

    X = (舞台宽/2)-(窗口宽/2)

    Y = (舞台高/2)-(窗口高/2)

    控制影片配合Player的方式,包括缩放问题

    stage.scaleMode

    可供选择值:flash.display.StageScaleMode

    舞台的对齐方式

    stage.align

    可供选择值:flash.display.StageAlign

    隐藏Flash Player的右键菜单

    stage.showDefaultContextMenu = false;

    检测系统是否具有音频功能

    flash.system.Capabilities.hasAudio

    检测播放器是在具有MP3解码器的系统上运行,还是在没有c的系统上运行

    flash.system.Capabilities.hasMP3

    检测播放器能 (true) 还是不能 (false) 播放流式视频

    flash.system.Capabilities.hasStreamingVideo

    检测播放器是在支持 (true) 嵌入视频的系统上运行,还是在不支持 (false) 嵌入视频的系统上运行

    flash.system.Capabilities.hasEmbeddedVideo

    检测播放器能 (true) 还是不能 (false) 对视频流(如来自 Web 摄像头的视频流)进行编码

    flash.system.Capabilities.hasVideoEncoder

    显示 Flash Player 中的”安全设置”面板

    flash.system.Security.showSettings();

    可供选择项:flash.system.SecurityPanel


    改变输出swf的尺度,背景颜色或帧频

    在”Navigator”窗框里右键你的项目>选中”Properties”>选中”ActionScript Compiler”>在”Additional compiler arguments”里输入你所需要的命令

    如想改变背景颜色,请输入: -default-background-color 0xffffff

    鼠标坐标

    mouseX mouseY

    检查变量类型并返回布尔值

    is

    检查变量类型并返回类型

    typeof

    检查对象类型并返回该对象

    as

    是数字但不是有效数字问题

    var quantity:Number = 15 – “rabbits”;

    trace(typeof quantity); //显示: “number” , 但它是NaN (not a number)

    trace(quantity is Number); //true

    trace(quantity != NaN); //false

    //使用isNaN()函数检测:

    isNaN(quantity); //true

    //检测变量是否内含有效数字:

    !isNaN(quantity); //false

    取消默认的严格编译模式

    在”Navigator”窗框里右键你的项目>选中”Properties”>选中”ActionScript Compiler”>取消”Enabel compile-time type checking”选项

    基元数据类型和复杂数据类型好比”值类型”和”引用类型”

    基元数据类型类似按值传递:

    var intOne:int = 1;

    var intTwo:int = 1;

    trace(intOne == intTwo); //true

    复杂数据类型类似按引用传递

    var arrayOne:Array = new Array(”a”, “b”);

    var arrayTwo:Array = arrayOne;

    trace(arrayOne == arrayTwo); //true

    //———————————–

    var arrayOne:Array = new Array(”a”, “b”);

    var arrayTwo:Array = new Array(”a”, “b”);

    trace(arrayOne == arrayTwo); //false

    优化逻辑AND(&&)和OR(||)的小知识】这点确实很重要

    对于逻辑And(&&):

        除非条件表达式的前半部分为真,否则,ActionScript不会再去求算逻辑AND运算符的后半部.如果前半部为假,整个条件表达式一定为假,所以再去求算后半部就没效率了.

    对于逻辑OR(||):

        除非条件表达式前半部为假,否则,ActionScript不会再去求算逻辑OR运算符的后半部,如果前半部为真,整个条件表达式一定为真.

    总结:使用逻辑AND(&&)时,把结果最可能为false的表达式放到前面;使用逻辑OR(||)时,把结果最可能为true的表达式放到前面.

    Timer类注意事项

    不要认为Timer可以极其准确;使用Timer时间间隔不要低于10毫秒.

    private,protected,internal,public访问权限

    private:只能在类本身内部访问,按惯例,命名私有成员时以下划线”_”开头;

    protected:可以由类本身或任何子类访问.但这是以实例为基础的.换言之,类实例可以访问自己的保护成员或者父类的保护成员,但不能访问相同类的其它实例的保护成员,按惯例,命名保护成员时以下划线”_”开头;

    internal:可以由类本身或者相同包内的任何类访问;

    public:可以在类内部访问,也可以由类实例访问,或者声明为static时,可以直接从类访问.

    【一个函数具有未知个数的参数,用arguments对象或”…(rest)”符号访问它的参数】

    注意:使用”…(rest)”参数会使 arguments 对象不可用;

    private funciton average():void{

        trace(arguments.length); //输出参数的个数

        // arguments的类型是:object,但可以像访问数组一样去访问它

        trace(arguments[1]); //输出第二个参数

    }

    private function average(…argu):void{

        trace(argu[1]); //输出第二个参数,argu参数名是自定义的.

    }

    让其它域的.swf访问本域的.swf

    在本域的.swf文件里加上:flash.system.Security.allowDomain()

    或者使用安全策略文件”crossdomain.xml”.在Flash 8以前,这个文件必须放在.swf所在域的根目录,现在,你可以使用flash.system.Security.loadPolicyFile(),指 定安全策略文件所在的位置.拒绝任何域的做法是在<cross-domain-policy>标签内什么也不填,安全策略文件也支持通用字 符”*”:

    <?xml version=”1.0″?>

    <!– http://www.mydomain.com/crossdomain.xml –>

    <cross-domain-policy>

        <allow-access-from domain=”www.riahome.cn” />

        <allow-access-from domain=”*.Y-boy.cn” />

        <allow-access-from domain=”210.38.19***8″ />

        <allow-access-from domain=”*” />

    </cross-domain-policy>

    数字的不同进制之间的转换

    parseInt(str:String, radix:uint = 0):Number 返回十进制的数,参数radix表示要分析的数字的基数.如果省略radix,就默认为10,除非字符串的开头是”0x”,”0X”或”0″:

    trace(parseInt(”0×12″)); //设定radix为16,输出:18

    trace(parseInt(”017″)); //设定radix为8,输出:15

    或者使用Number,uint和int对象的toString(radix)方法.

    使用Math.round()对一个数取整,四舍五入

    Math.round()

    trace(Math.round(204.499)); //输出:204

    trace(Math.round(401.5)); //输出:402

    使用Math.floor()对一个数向下取整,就是只要整数部分而不理会小数分

    trace(Math.floor(204.99)); //输出:204

    使用Math.ceil()对一个数向上取整,只要小数部分不为零,整数部分就加1

    trace(Math.ceil(401.01)); //输出:402

    产生一个随机数

    使用Math.random()产生一个伪随机数n,其中 0 <= n < 1

    把数字取至最近的小数点位,即指定精确度

    1. 决定你要取的数字的小数点位数:例如,如果你想把90.337取成90.34,就表示你要取到两位小数点位,也就是说你想取至最近的0.01;

    2. 让输入值除以步骤1所选的数字(此例为0.01);

    3. 使用Math.round()把步骤2所计得的值取成最近的整数;

    4. 把步骤3所得的结果乘以步骤2用于除法的那个值.

    例如,要把90.337取成两个小数点位数,可以使用:

    trace(Math.round(90.337/0.01)*0.01); //输出:90.34

    把数字取成一个整数的最接近倍数值

    例1,这样会把92.5取成5的最近倍数值:

    trace(Math.round(92.5/5)*5); //输出:95

    例2,这样会把92.5取成10的最近倍数值:

    trace(Math.round(92.5/10)*10); //输出:90

    在指定数值范围内获得随机数

    //可取范围:[min, max]

    private function randRange(min:Number, max:Number):Number {

        var randomNum:Number = Math.floor(Math.random() * (max – min + 1)) + min;

        return randomNum;

    }

    应用例子:

    模拟投银币,即希望得到随机布尔值(true 或 false): randRange(0, 1);

    模拟投骰子,即希望得到随机六个值: randRange(1, 6);

    为避免被缓存而需要产生一个独一无二的数字追加在URL尾端,通常最佳方法是取得当前毫秒数.

    弧度(radian)与度数(degree)之间的转换

    从弧度转为度数: degrees = radians * 180 / Math.PI

    从度数转为弧度: radians = degrees * Math.PI / 180

    计算两点之间的距离

    勾股定理: c2 = a2 + b2

    假设有两个影片剪辑mc1和mc2,则它们两点间的距离c为:

    var c:Number = Math.sqrt(Math.pow(mc1.x – mc2.x, 2) + Math.pow(mc1.y – mc2.y, 2));

    模拟圆周运动

    已知圆心o(x0, y0),半径r和弧度angle,求圆上任意一点P(x, y)的坐标:

    x = x0 + (Math.cos(angle) * r);

    y = y0 + (Math.sin(angle) * r);

    注意:舞台的x轴正方向水平向右,y轴正方向垂直向下.

    模拟椭圆运动

    已知圆心o(x0, y0),长轴a,短轴b以及弧度angle,求圆上任意一点P(x, y)的坐标:

    x = x0 + (Math.cos(angle) * a);

    y = y0 + (Math.sin(angle) * b);

      

    华氏温度和摄氏温度之间的转换

    华氏温度 = 摄氏度数 * 9 / 5 + 32

    摄氏温度 = (华氏度数 – 32) * 5 /9

    公斤与磅之间的转换

    公斤 = 磅 * 2.2

    磅 = 公斤 / 2.2

  • 相关阅读:
    ARC 066D Xor Sum AtCoder
    哈尔滨理工大学---沼跃鱼(待整理)
    C#从字符串获取文件路径
    蓝桥杯---机器人行走
    关于float和double的输入输出问题
    湖南多校对抗赛---Jerry's trouble
    湖南多校对抗赛---Good subsequence
    湖南多校对抗赛---Rectangle(01背包)
    蓝桥杯---公式解析
    蓝桥杯---砝码称重
  • 原文地址:https://www.cnblogs.com/iwhk/p/2537839.html
Copyright © 2011-2022 走看看