`

ActionScript 3.0基础提高——上篇

 
阅读更多
我一直非常重视ActionScript 3.0的基础。也许是觉得自己的基础不够“过硬”的缘故吧,在看过了一些ActionScript的图书后,又回过头来看《Foundation ActionScript 3.0 for Flash and Flex》,从中得到不少收获,愿同各位AS3开发者朋友们分享。
以下仅仅是我的一些读书笔记和思考,欢迎各位评论;讨论中共同进步!


原数组:var array:Array = [John, Bill, Jackson, Blund, Frank]
-----------删除数组中的元素的方法--------
方法1:
delete array[1];
trace(array);
结果:
John, Jackson, Blund, Frank

方法2:
array.splice(1,1); //从下标为1的位置,删除1个元素
trace(array);
结果:同上

------------for循环---------------
循环1:
for(var element: String in object){
    trace(object[element]);
}
循环2:
for each(var element: Object in object){
    trace(element);
}

-----------多个参数的函数------------
function sum(...operands):Number{
   var numOperands:uint = operands.length;
   var total:Number = 0;
   for(var i:unit = 0; i < numOperands; i++){
      total += operands[i];
   }
    return total;
}

----------拷贝对象(真正的拷贝)--------------
var array1:Array = new Array("one", "two", "three");
var array2:Array = array1.slice();

---------关于构造函数------------
如果B继承A,即B为A的子类,A为父类。在写B的构造函数的时候务必在第一行加上super(...),否则B将默认调用A的无参数构造函数。

--------显示列表深度-----------
第一个加到舞台上的图形的Index为0,位于一切物体的最下边;Index的值越高表示物体在越前的位置上显示。

---------------------------------------------------
---------------------------------------------------
----------Blend Mode(混合)-----------------
这个名词用在Flash中,我还真不知道。后得知,在Flash CS4中的属性框中的“混合”中可以设定各种混合模式,不过被设定模式的组件必须是Movieclip才可以。
代码实例:
package {
    import flash.display.Sprite;
    import flash.display.BlendMode;
    import flash.display.Graphics;
   
    public class Blend extends Sprite{

        private var rect1:Sprite;
        private var rect2:Sprite;
        private var rect3:Sprite;
       
        public function Blend() {
            rect1 = new Sprite();
            rect2 = new Sprite();
            rect3 = new Sprite();
           
            var g1:Graphics = rect1.graphics;
            g1.beginFill(0xff200a);
            g1.drawRect(0,0,100,100);
           
            var g2:Graphics = rect2.graphics;
            g2.beginFill(0xf343ea);
            g2.drawRect(50,20,100,100);
           
            var g3:Graphics = rect3.graphics;
            g3.beginFill(0xe2200a);
            g3.drawRect(30,50,100,100);
           
            addChild(rect1);
            addChild(rect2);
            addChild(rect3);
           
            trace("rect1: "+getChildIndex(rect1));
            trace("rect1: "+getChildIndex(rect2));
            trace("rect1: "+getChildIndex(rect3));
           
            rect2.blendMode = BlendMode.INVERT;
        }
    }
   
}
结果:以下就是所谓的Blend,即混合效果中的一个。


----------Fileter(滤镜)------------------------
实例代码:
package {
    import flash.display.Sprite;
    import flash.display.Graphics;
    import flash.filters.*;
   
    public class Blend extends Sprite{

        private var rect1:Sprite;
        private var rect2:Sprite;
        private var rect3:Sprite;
       
        public function Blend() {
            rect1 = new Sprite();
            rect2 = new Sprite();
            rect3 = new Sprite();
           
            var g1:Graphics = rect1.graphics;
            g1.beginFill(0xaf89ee);
            g1.drawRect(0,0,100,100);
           
            var g2:Graphics = rect2.graphics;
            g2.beginFill(0xaf89ee);
            g2.drawRect(50,20,100,100);           
           
            addChild(rect1);
            addChild(rect2);
           
            trace("rect1: "+getChildIndex(rect1));
            trace("rect1: "+getChildIndex(rect2));
           
            var gfilter:GlowFilter = new GlowFilter(0x000000,1,8,8);
            rect2.filters = [gfilter];
        }   
    }   
}
结果:使用的GlowFilter滤镜效果使得第二个方块发黑光。


删除滤镜:
filters = square.filters;
filters.pop();
square.filters = filters;

-----------Flash 高级滤镜--------------
1. ConvolutionFilter(浮雕滤镜)
2. DisplacementMapFilter(哈哈镜效果)

----------关于Stage------------------
1. 全屏的方法,发布HTML中设置“仅Flash,允许全屏”,并在代码中嵌入this.stage.displayState=StageDisplayState.FULL_SCREEN;
2. Stage的ScaleMode的选项。
3. Stage的StageAlighn的选项。

---------关于MotionBase, Motion, AnimatorFacotry类------------
这几个类我没见过,不过看过本书和研究后,发现可以通过这些类在代码中实现帧动画。

代码示例如下,其中的_ball是Flash舞台上的一个组件实例,arrX和arrY指定了_ball对象的运动路径(分别对应x和y)。数组中每一个(x,y)表示一帧中_ball在舞台上的位置。
代码示例1:
import fl.motion.AnimatorFactory;
import fl.motion.MotionBase;
import fl.motion.Motion;


var mb:MotionBase = new Motion();
mb.duration=24;
mb.overrideTargetTransform();
var arrX:Array = new Array();
var arrY:Array = new Array();
for(var i:int = 0; i < 240; i++){
    arrX.push(i);
}
for(var j:int = 0; j < 240; j++){
    arrY.push(0);
}
mb.addPropertyArray("x",arrX);
mb.addPropertyArray("y",arrY);

var afb:AnimatorFactory=new AnimatorFactory(mb);
afb.addTarget(_ball);

其实还可以不用数组,如果是动画设计师已经在Flash中做好了的动画,可以通过以下方式获取其路径。
首先在时间轴选中要导出的一段帧,然后选择Flash CS4中菜单中的“命令”->"导出到XML"。最后你是通过加载外部xml也好,还是直接复制XML内容也好,直接用XML内容初始化Motion。效果是一样的。代码示例2用的是XML内容初始化Motion.
代码示例2:
import fl.motion.AnimatorFactory;
import fl.motion.MotionBase;
import fl.motion.Motion;

var xml:XML = <Motion duration="46" xmlns="fl.motion.*" xmlns:geom="flash.geom.*" xmlns:filters="flash.filters.*">
    <source>
        <Source frameRate="24" x="24" y="25" scaleX="1" scaleY="1" rotation="0" elementType="graphic" symbolName="补间 5">
            <dimensions>
                <geom:Rectangle left="-24" top="-24" width="48" height="48"/>
            </dimensions>
            <transformationPoint>
                <geom:Point x="0.5" y="0.5"/>
            </transformationPoint>
        </Source>
    </source>

    <Keyframe index="0" tweenSnap="true" tweenSync="true">
        <tweens>
            <SimpleEase ease="0"/>
        </tweens>
    </Keyframe>

    <Keyframe index="7" tweenSnap="true" tweenSync="true" firstFrame="7" x="77.5" y="135">
        <tweens>
            <SimpleEase ease="0"/>
        </tweens>
    </Keyframe>

    <Keyframe index="11" tweenSnap="true" tweenSync="true" firstFrame="11" x="192.6" y="181.55">
        <tweens>
            <SimpleEase ease="0"/>
        </tweens>
    </Keyframe>

    <Keyframe index="14" tweenSync="true" firstFrame="14" x="78.95" y="215"/>

    <Keyframe index="16" tweenSnap="true" tweenSync="true" firstFrame="16" x="23.950000000000003" y="247">
        <tweens>
            <SimpleEase ease="0"/>
        </tweens>
    </Keyframe>

    <Keyframe index="23" tweenSync="true" firstFrame="23" x="49.95" y="58"/>

    <Keyframe index="26" tweenSnap="true" tweenSync="true" firstFrame="26" x="109" y="23">
        <tweens>
            <SimpleEase ease="0"/>
        </tweens>
    </Keyframe>

    <Keyframe index="33" tweenSync="true" firstFrame="33" x="247" y="-1"/>

    <Keyframe index="35" tweenSnap="true" tweenSync="true" firstFrame="35" x="295.95" y="8">
        <tweens>
            <SimpleEase ease="0"/>
        </tweens>
    </Keyframe>

    <Keyframe index="41" tweenSnap="true" tweenSync="true" firstFrame="41" x="356.9" y="111">
        <tweens>
            <SimpleEase ease="0"/>
        </tweens>
    </Keyframe>

    <Keyframe index="45" tweenSync="true" firstFrame="45" x="262.95" y="222"/>
</Motion>;
var mb:MotionBase = new Motion(xml);
mb.duration=24;
mb.overrideTargetTransform();
var afb:AnimatorFactory=new AnimatorFactory(mb);
afb.addTarget(_ball);
分享到:
评论

相关推荐

    Flash ActionScript 3.0 编程技术教程(附书光盘)

    第6~9章介绍了ActionScript 3.0的核心——类及以类为基础的面向对象程序设计方法,包括类的基本概念、ActionScript 3.0中常用类的使用、显示编程和组件类;第10、11章分别介绍了几个ActionScript 3.0实际应用的范例...

    Flash ActionScript 3.0编程技术教程(全)

    第6~9章介绍了ActionScript 3.0的核心——类及以类为基础的面向对象程序设计方法,包括类的基本概念、ActionScript 3.0中常用类的使用、显示编程和组件类;第10、11章分别介绍了几个ActionScript 3.0实际应用的范例...

    Flash ActionScript 3.0编程技术教程

    第6~9章介绍了ActionScript 3.0的核心——类及以类为基础的面向对象程序设计方法,包括类的基本概念、ActionScript 3.0中常用类的使用、显示编程和组件类;第10、11章分别介绍了几个ActionScript 3.0实际应用的范例...

    精通Flex 3.0——基于ActionScript 3.0实现_源代码

    《精通Flex 3.0——基于ActionScript 3.0实现》一书源代码。 Flex 3.0 ActionScript 3.0源代码 Flex 3.0源代码。 --------------------------- 第1篇 Flex技术概述 第1章 Flex概述 3 1.1 Flex简介 3 1.2 Flex...

    Flash课件ActionScript3.0

    本篇将围绕“Flash课件ActionScript3.0”展开,详细讲解其中涉及到的基础概念、语法特性,以及如何通过实践来提升编程技能。 一、ActionScript3.0概述 ActionScript3.0(AS3.0)是Adobe Flex和Flash开发中的主要...

    Actionscript3.0开发的射击小游戏

    本项目——“三角也疯狂”,就是一个基于ActionScript3.0开发的射击小游戏,展示了ActionScript3.0在游戏开发中的应用。 1. **ActionScript3.0基础知识**: - AS3.0是ActionScript的重大升级,引入了强类型、面向...

    ActionScript 3.0 API文档及Flex开发详解电子书

    本压缩包包括: 《ActionScript 3.0 语言和组件参考.chm 《Flex 3 RIA开发详解与精深实践》PDF及 配套代码 (1)《ActionScript 3.0 语言和组件参考》概述 ...第9章 桌面上的Web开发——AIR 第10章 Flex AIR开发实践

    ActionScript3.0做的Flash小游戏 俄罗斯方块

    在这个项目中,开发者利用ActionScript3.0的强大功能,构建了一个经典的Flash小游戏——俄罗斯方块。让我们深入探讨一下这个项目中的关键知识点。 1. **ActionScript3.0基础**: ActionScript3.0是AS系列的最新...

    C语言典型应用系统之——聊天室(ActionScript 3.0实现)

    《C语言典型应用系统之——聊天室(ActionScript 3.0实现)》 在IT领域,编程语言的运用千变万化,其中C语言以其高效、底层控制能力强等特点,被广泛应用于系统开发、嵌入式系统以及各种复杂计算任务。而...

    ActionScript3.0做的Flash小游戏 点灯游戏

    《ActionScript3.0在Flash小游戏开发中的应用——点灯游戏》 ActionScript3.0是Adobe Flash Professional和Flash Builder等开发工具中的核心编程语言,它以其强大的性能和丰富的功能,广泛应用于创建交互式网页内容...

    给设计师看的交互程序设计书Flash ActionScript 3.0溢彩编程.zip.002(2/2)

    给设计师看的交互程序设计书Flash ActionScript 3.0溢彩编程,2010年6月于清华大学出版

    《ActionScript3·0编程》中文PDF

    《ActionScript3.0编程》是一本专注于介绍Adobe Flash平台上的编程语言——ActionScript3.0的中文教程。ActionScript3.0是Flash Professional、Flash Builder等开发工具的核心语言,用于创建互动式富媒体内容、游戏...

    ActionScript 3.0 cookbook中文简体完整版电子书

    一本全面介绍Adobe RIA平台核心语言——ActionScript3.0的技术宝典 一本囊括300多项问题解决方案的实战手册 一本献给所有 Flex/Flash 应用开发人员的Cookbook 本书讨论了在Flash Player里执行的ActionScript 3.0语言...

Global site tag (gtag.js) - Google Analytics