Flash ActionScript 3 殿堂之路学习笔记

来源:互联网 发布:北京工商网络申请平台 编辑:程序博客网 时间:2024/05/22 08:04
http://blog.csdn.net/stardtx/article/details/5982401

第一章 语法基础

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

声明变量及对象方法 
声明时最好有意识地使用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),函数名)

原创粉丝点击