Flash ActionScript 3 殿堂之路学习笔记

来源:互联网 发布:手机淘宝评价在哪 编辑:程序博客网 时间:2024/05/21 22:33

第一章 语法基础

第一节 对象或变量的声明
========================================================

声明变量及对象方法
声明时最好有意识地使用AS2.0中的强化输入法 在对象或变量名后用 :类型 ,以告诉编译器该对象或变量的类型,有助于编译器在编码出错时及早发现问题并报告.

var 对象或变量名:类型 = new 对象()/值

1.Flash基本数据类型:

[类型名称
类型标识符
声明方法
]

字符串类型
======================================
String
var 变量名:String = new String(字符串)
或简写
var 变量名:String = 字符串

数值类型
======================================
Number
var 变量名:Number = 数值

布尔类型
======================================
Boolean
var 变量名:Boolean = true/false

undefined和null
undefined是未定义的对象或变量
null是空值,编写类的时候,良好的开发习惯是主动将已声明但没有初值的变量赋为null

第二节 运算符及流程控制
========================================================

常用运用符
+ - * /
基本运算符 加减乘除

++ --
单目运算符,自加1 自减1,注意其位置的不同,如果与表达式混用,在前是先对变量运算再计入表达式(此操作影响表达式结果),在后是先计入表达式再对变量运算(此操作不影响表达式结果),在单独运用的情况,在前在后都没所谓.

+= -= *= /=
加/减/乘/除等
其形式与 x=x+值 x=x-值 x=x*值 x=x/值 一样,属于简写,因其方便,所以多采用此写法.

? :
条件运算符  逻辑表达式?结果1:结果2
根据逻辑表达式的值,返回不同的结果, 结果1(true):结果2(false)
常见用于操作时间的前导加0
Hour.length == 1 ? "0" + Hour : Hour

&&逻辑与 ||逻辑或 !逻辑非
==等于 !=不等于 <=少于等于 >=大于等于

&按位与 |按位或 <<按位左移 >>按位右移
单个是按位操作 与上面的逻辑操作符不同

位运算符常见于操作颜色数值,使用位运算符时会将操作数自动化为二进制数再进行操作

一个十六进制的颜色值(如0xFF0000)一般可以对应化为24位的二进制数,

因为这32位二进制数对应是  8位(红) 8位(绿) 8位(蓝),所以如果要单独提取则是
红 0xFF0000 >>16 & 0xFF    (全体向右移动16位,然后与0xFF作按位与运算)
绿 0xFF0000 >>8 & 0xFF     (全体向右移动8位,然后与0xFF作按位与运算)
蓝 0xFF0000 & 0xFF         (全体与0xFF作按位与运算)

合成颜色值(与分离色值的操作相反,在构造setColor时就要用到这个)
var R:Number = 128
var G:Number = 24
var B:Number = 189
var RGB:Number = R<<16 | G<<8 | B
将色值按位置进行移位并使用按位与运算符合并

程序流程控制
使用for in比直接使用for操作数组将得到更佳的性能

第三节 函数的使用
========================================================

构造形式

function 函数名(形参:数据类型):函数返回类型{
     //函数体
}

函数形参默认情况下有一个arguments对象,其内包含所有传入的参数对(包括没声明的形参数量)
arguments对象有两个属性:caller和callee
caller返回调用函数的宿主函数名
callee返回当前函数的实体引用,常用于匿名函数的递归

如函数无返回类型的,则使用Void类型
如函数有返回类型的,必须在函数尾部使用 return 返回值.

匿名函数与正常函数不同之处是 没有函数名,结尾有一个分号

概念补充:
对场景的引用,
_root   指代主场景,尽可能少直接使用,此属于绝对定位
_parent 指代上一级场景,此属于相对定位
this    指代当前场景,可与_parent配合使用,如 this._parent

第二章 对象入门
实例化对象方法
var 对象名:类名 = new 类名()

可以为动态类或对象添加自定义属性或方法
对象名.自定义属性 = 值
对象名.自定义方法 = function(){
//方法体
}

这个常用于韩国式弹性菜单中,用于标识当前影片剪辑的id,在for循环体内,一般写成:
this["mc"+i].id
如果想当然地在on处理事件中使用for循环的当前值,则会永远是for循环的终结值

关联数组
========================================================

Flash中所有类的基类是 Object
Object一般多用于构造关联数组(哈希表)
比如在函数中,如果需要传入大量参数,则使用对象比直接单独声明多个形参更方便.

应用形式:
var 对象:Object = new Object();
对象.属性 = 值
对象.属性2 = 值2
对象.属性3 = 值3

与函数一样,除了有实名函数外,还有匿名函数,而匿名的对象则叫对象文本,一般应用于不需要显式声明对象的函数中,
如duplicateMovieClip函数的形参中,有一个init的形参是可选的

构造方法:
{属性:值,属性2:值2,属性3:值3}

注意:对象文本的概念在学习初期可能没法体现,但到后期当深入应用带有 初始对象的函数时就会明白其使用了
比如:
for (i=0; i<9; i++) {
//mc.duplicateMovieClip("mc"+i, this.getNextHighestDepth(), {_x:i%3*(mc._width+10),_y:int(i/3)*         mc.duplicateMovieClip("mc"+i, 1, {_x:i%3*(mc._width+10),_y:int(i/3)*(mc._height+10)});
}

这个是复制九宫格的代码 {_x:i%3*(mc._width+10),_y:int(i/3)*(mc._height+10)}
这句可以简单看为{_x:值,_y:值}  其实就是等同

for (i=0; i<9; i++) {
mc.duplicateMovieClip("mc"+i, 1)
this._x=i%3*(mc._width+10)
this._y=int(i/3)*(mc._height+10)
}

从这里就看出使用对象文本的优势了

访问关联数组值
===============
有两种方法可以访问关联数组,
1:点语法
对象.属性

2.数组访问符
对象[关键字]

使用数组访问符的优势所在是,点语法不能使用文本组合,而数组访问符可以,
比如循环同步读取三个对象的同一属性,可使用
for(i=1;i<4;i++){
    trace(this["对象"+i].属性)
}

因为对象也属性场景的关联数组中的一个对象  所以同理可以用场景的this _root _parent来访问

而使用点语法 就不能使用字符串连接的方式来访问对象了

for(i=1;i<4;i++){
    //trace("对象"+i.属性)
    //这样的代码是错误的
}


========================================================
类路径
所有类都应该编写定义在外部的as文件中,默认情况下,flash会优先在FLA工程的保存目录下搜索类文件
或者在 编辑>首选参数中 设置全局类路径

创建类
=========================
class 类名{

}

定义类属性
=========================
private _属性名:数据类型

私有属性建议使用_下划线开头

定义类属性获取函数、设置函数
=========================
定义私有属性的原因为就为了保证设置数据的合法性,而提供对私有属性间接访问的方法就是

为属性定义获取及设置函数

获取函数
public function get 属性名():数据类型{
    return 私有属性值;
}

设置函数
public function set 属性名(value:数据类型):Void{
    私有属性 = value;j
}

构造函数
=========================
function 类名(形参:数据类型){

}

类静态属性、静态方法
=========================
static public/private var 属性:数据类型 = 值
static public/private function 方法名(形参:数据类型):返回类型{

}

类包的声明及导入类包
=========================
class 类包路径{

}

import 类包路径

扩展类
=========================

继承:
class 类名 extends 父类{

}

接口:
interface 接口名{

}

实现接口:
class 类名 implements 接口名{

}

动态类:
dynamic class 类名{

}

第六章:调试和错误处理
===========================
try{
    throw new Error(["message"]);
    //显式抛出异常
}
catch(erObject:Error){
   //异常处理
   //erObject.message
   //erObject.name
}
finally{
}

第七章:数组
===========================
构建方法:
var 数组名:Array = new Array();
简写:var 数组名:Array = [];

var 数组名:Array = new Array(长度:Number);

var 数组名:Array = new Array(元素1,元素2,元素n);
简写:
var 数组名:Arry = [元素1,元素2,元素n];

第十三章:显示对象 MovieClip
===========================
_root  _parent  this
使用数组运算符访问对象
_root[]  _parent[]  this[]

保持四角缩放比例
import flash.geom.Rectangle;
MC.scale9Grid = new Rectangle(左上角x座标,左上角y座标,矩形宽度,矩形高度);

Tween类
==================================
import mx.transitions.Tween;
import mx.transitions.easing.*;
var tw:Tween = new Tween(MC,"属性",效果,实例值,目标值,帧/时间,帧/秒)
Back, Bounce, Elastic, Regular, Strong
easeIn, easeOut, easeInOut

复制MC:
mc.duplicateMovieClip(新名,层级)

附加MC:
mc.attachMovieClip(链接名,新名,层级,[初始化])

创建空白MC:
mc.createEmptyMovieClip(新名,层级,[初始化])

删除MC:
mc.swapDepths(0)
mc.removeMovieClip();

拖动:
this.startDrag(true);
this.stopDrag();

遮罩:
setMask(null)

座标空间转换:
globalToLocal(对象)
localToGlobal(对象)

缓存位图表面:
mc.cacheAsBitmap = true;

第十五章:用程序Drawing API绘图
========================================
mc.beginFill(颜色,alpha)
mc.lineStyle(粗细,颜色,alpha)
mc.moveTo(_x,_y)
mc.lineTo(_x,_y)
mc.endFill()

绘制曲线:
mc.curveTo(控制点x座标,控制点y座标,目标点x座标,目标点y座标)

第十七章:应用滤镜
========================================
import flash.filters.BlurFilter;
//新建滤镜对象
myBlurdata = new BlurFilter(0, 0, 1);
var myFilters:Array = main.filters;
myFilters.push(myBlurdata);
myFilters[0].blurX = Math.abs(Math.floor((main.oid-1)*-256+256-main._x)/4);
main.filters = myFilters;

第十八章:位图API
========================================
import.display.BitmapData;
var 对象:BitmapData = new BitmapData(宽度,长度,是否透明,填充色)

加载库
var 对象:BitmapData = BitmapData.loadBitmap(链接标识符);

显示对象
mc对象.attachBitmap(位图对象,层级)

import flash.display.BitmapData;
this.createEmptyMovieClip("myMC",this.getNextHighestDepth())
this.createEmptyMovieClip("myMC2",this.getNextHighestDepth())
var myLoader:MovieClipLoader = new MovieClipLoader()
var oListener:Object = new Object()
oListener.onLoadInit = function(){
    var myBMP:BitmapData = new BitmapData(myMC._width,myMC._height)
    myBMP.draw(myMC)
    myMC2.attachBitmap(myBMP,1)
    myMC2._y = 100
}
myLoader.addListener(oListener)
myLoader.loadClip("http://eiv.baidu.com/maimg/20080618/104161828.jpg",myMC)

var MCLoader对象:MovieClipLoader = new MovieClipLoader();
var 侦听obj:Object = new Object();
侦听obj.onLoadProgress = function(target_mc:MovieClip, loadedBytes:Number, totalBytes:Number) {
     trace(loadedBytes);
}
MCLoader对象.addListener(侦听obj);
MCLoader对象.loadClip(加载URL, 对应影片剪辑实例名);

第十九章:TextField类
========================================
createTextField(实例,深度,_x,_y,_width,_height)

应用Selection对象  getBeginIndex   getEndIndex

第二十章:TextFormat类
========================================
应用样式表
var 样式对象:TextField.StyleSheet = new TextField.StyleSheet();

样式对象.setStyle(标识,{样式对象文本})
标识:常规html标签 或自定义以句号开头的标签(同时必须显示在标签中使用 class属性定义使用的样式)
文本对象.styleSheet = 样式对象;

第二十二章:使用舞台
========================================
Stage.scaleMode = 缩放模式:String
(showAll 显示全部  noBorder 无边框 exactFit 精确匹配 noScale 无缩放)

Stage.align = 对齐方式:String
(L 左 R 右 T 上 B 下  LT 左上 LB 左下 RT 右上 RB 右下)

检测播放器窗体大小变化事件:
onResize

第二十三章:ContextMenu类
========================================
var CtM:ContextMenu = new ConttextMenu([初始函数])
CtM.hideBuiltIntems();
var CtMI:ContextMenuItem = new ContextMenuItem(文字,函数)
Ctm.customItems.push(CtMI);
this.menu = CtM

第二十四章:capabilities和security对象
========================================
访问剪贴板
System.setClipboard(字符)
显示设置面板
System.showSetting([数字])

第二十七章:管理视频
========================================
添加Video对象,在库中,赋实例名.
var Nct对象:NetConection = New NetConection();
Nct对象:connect(null);
var Ns对象:NetStream = new NetStream(Nct对象);
Ns对象.play(FLV路径);
Video对象.attachVideo(Ns对象);

检查状态结息;
Ns对象.onStatus = function(oData:Object):Void{
    trace(oData.code);
}

检索元数据:
Ns对象.onMetaData = function(oMetaData:Object):Void{
    trace(oMetaData.duration);
}

第二十八章:使用UI组件
========================================
首先在库中添加组件实例
this.createObject(组件名,新名,层级)
this.createClassObject(类名,新名,层级)
类名一般  mx.controls.组件类

删除运行时组件实例
this.destroyObject(类例名)

移动组件
组件名.move(x,y)

调整大小
组件名.setSize(w,h)

第三十一章:本地共享对象
========================================
var 共享对象:SharedObject = sharedobject getlocal(名称);
共享对象.data.属性 = 值
共享对象.flush([指定大小]);
共享对象.getSize();

检测对象是否存在
var a:Boolean = false
for(item in 共享对象.data){
    a = true;
    break;
}
if(a){
//
}

第三十二章:LocalConnection对象
========================================
发送方影片
var local对象:LocalConnection = new LocalConnection();
Local对象.send(连接名:String,调用方法:String,[参数]_
Local对象.onStatus = function(oStatus:Object):void{
    //发送状态,oStatus:Object > level属性[status / error]
}

//回调响应
Local对象.方法名 = function():void{
    //
}
Local对象.connect(侦听连接名)

接收方影片
var Local对象:LocalConnection = new LocalConnection()
Local对象.方法名 = function([参数]){
    //回调
    this.send(连接名,调用方法,[参数]);
}

Local对象.connect(侦听连接名)

跨域发送与调用
发送方 send方法连接名前加域,如:(kgbbs.cn:连接名)
或连接名以下划线开始,超域.

接收方
响应发送方对应域请求,响应使用相同下划线侦听连接名的超域调用.
//自动调用的方法
Local对象.allowDomain = function(sDomain:String):boolean{
    //判断 sDomain的合法性
    return(sDomain == 指定域:Strint)
}
//停止侦听连接
Local对象.close();

第三十三章:XML类、LoadVars类
========================================

var xml对象:XML = new XML();
xml对象.onLoad = function(Success:Boolean):Void{
    if(Success){
        //
    } else {
        //
    }
}
xml对象.load("xml地址")

跨域共享数据
1.创建crossdomain.xml
2.DNS别名
3.代理服务器脚本

第三十八章:JavaScript
========================================
import flash.external.ExternalInterface;
Externa(Interface.call(函数名:String,参数:String)
//
ExternalInterface.addCallback(调用名:String,作用域(this),函数名)

原创粉丝点击