我在公司实习时叫我看的《殿堂之路》,语法那块看起来还好但始终觉得这书有点不爽,也浪费了我很多时间。后来毕设的时候看见参考文献有《从入门到精通这本书》看后果断要给力点。今天突然想起去豆瓣搜索下评分确实要高。但是也发现了很多更好的书,当初如果不急着学AS3现在学到的东西肯定多点。
以后学知识搜书籍,先豆瓣一下吧,再挑下适不适合自己。比如学linux有《一站式c》、《私房菜》、《linux下编程》。我更喜欢最后那本,第一本作者新版都不要linux那几个字了,第二本名字只有linux而没有编程那个部分。对我这种急功近利的不想深入linux再学linux下编程就所以选最后那本。
最后记住 head first系列书最好,从入门到精通系列书还行。
-------------------------------------------------------------------------------------------------------------------
第1部分 Actionscript 3语言基础
第一章 了解Actionscript 3
第一个"Hello,world"程序有三种方法,fla的主时间轴或文档的类绑定、直接用builder编译成swf。主时间轴的对象:root 舞台Stage实例:stage。
第二章 Actionscript 3语言基本元素
1.数据类型一切皆对象。变量持有引用,而引用则指向要操作的对象。
基元数据类型Boolean、int、uint、Number、String是值类型(创建时不需要new,需要new的一定不是值引用),复杂类型是引用类型。基元数据类型通过不变对象使编译器内部统一都是引用(对我们没影响)。
var 变量名:数据类型 = 值;//变量的声明
const num:int = 10; //常量的声明
未声明类型(var h; var i:*)为 undefined String、Array、Object默认值为 null 默认值:int、uint默认值为0;Number为NaN(Not a Number); Boolean为false //其实只有一个特殊的常用函数:int.MAX_VALUE dval.toFixed(2)保留几位小数
a.toString(16) parseInt("1100", 2);
2.运算符
运算符本质是函数。
添加的运算符:typeof、is、as、in
第三章 Actionscript 3流程控制
条件:if-else、switch循环:for、while、for-in、for each-in; break、continue
帧循环:gotoAndPlay(2)到这一帧时跳到第2帧
stage.frameRate = 30;
mc.addEventListener(Event.ENTER_FRAME,onMove);
注:如果多次使用enterFrame事件只有最后一次有效。间隔循环:
setInterval用法
var id:uint = setInterval(函数名,间隔毫秒,传入函数的参数)
clearInterval(id); //清除间隔标记
setTimeout用法:Timer类
var myTimer:Timer = new Timer(1000,3); //间隔1000ms,3次
myTimer.addEventListener(TimerEvent.TIMER,timerHandle);
第四章 Actionscript 3中的函数及高级使用技巧
function 函数名(参数):void{
}
[其他] view plaincopy
arguments.length; //传入参数的长度
arguments.cellee(a-1,b-1,c-1); //递归调用本函数
参数:按值还是按引用传入同C++;默认参数也是同C++参数列表从左到右默认补充的从右到左。 函数语句定义时法像以前的C++其实有点变扭,在编译的时候会被提升到最前面,不用像C++那样先定义再使用。但是AS 3中函数名就是一切想怎么用就怎么用。如果定义 ...paras,参数就传给数组paras不能调用arguments。
第2部分 Actionscript 3面向对象编程
第五章 类和对象
建立类和对象,实例属性和方法、静态属性和方法、构造函数都像C++。局部变量->方法参数->实例属性->静态属性的查找顺序。
但舍去了C++繁琐的地方。析构函数(高级语言自动回收)和复制构造函数没有了,静态属性终于不用那么反人类思维了。C++中有点怪的enum也没了,const函数也没了,函数重载也没了。
第六章 Actionscript 3中的封装:类的成员、类、包与访问控制
public、internal、protected、private四个访问级别 。默认访问级别都是internal类的访问控制只有internal(默认,包外类就是internal)、public。
public function get hello():void{
return m_strHello;
}
public function set hello(str:String):void{
//其实传入参数的形式我老是忘记o(╯□╰)o
m_strHello = str;
}
第七章 命名空间
第八章 复合与继承
关键字extends从父类继承非private成员。但AS 3中类的静态成员不被子类继承但存在的范围链包括父类和所有子类(可以直接访问或通过父类,但不能通过子类)
可以override方法,但不能重写实例。不能再子类中改变父类实例属性的类型,多态那里好应用。
被final定义过的方法不能被重写,super持有父类的引用。super不能用在静态方法中。
第九章 多态
向下转换是指:当一个子类对象以父类数据类型使用时,可以再将它还原成子类对象。利用is as第十章 抽象类和接口
package 包路径{
访问控制 interface 接口名称{
function 方法名(参数:参数类型):返回类型 ;
static function 方法名(参数:参数类型):返回类型 ;
function get 方法名(参数:参数类型):返回类型 ;
function set 方法名(参数:参数类型):返回类型 ;
}
}
最重要的用法是接收一个接口类型的对象: 通过implements实现接口,再在类里实现函数。(这里不是继承不要override,只有类的继承时要override)。private fucntion printName(o:IhasName):void{
trace(o.name);
}
第3部分 核心类
第十一章 核心类和全局函数
第十二章 数组:Array
数组里可以包含不同类型的元素了,访问:a[i] a.length();
基本操作:
查找:indexOf、lastIndexOf 超找目标元素在数组中的下标
目标数组.indexOf(要查找的元素);
目标数组.lastIndexOf(要查找的元素);
在数组首尾增加元素:push、unshift
在数组首尾删除元素:pop、shift
在数组中插入或删除连续的元素:splice
数组.splice(删除点的索引,要删除元素的个数); //删除某位置之后几个元素
数组.splice(删除点的索引); //删除某位置之后所有元素
数组.splice(删除点索引,0,元素1,元素2...); //在数组某位置后增加元素
获取数组中部分元素:slice
数组.slice(起点索引,终点索引); //老规矩不等于终点
排序:reverse、sort、sortOn
数组.reverse(); //倒序
数组.sort(函数);
还有些操作数组每个元素的,暂时没认真看。第十三章 String
字符串是不变对象,对+、=及关系符号重载访问字符:charAt(); //没有中括号了坑爹,因为不能更改字符的原因不然和中括号违背
长字符串.indexOf(短字符串);
长字符串.slice(起点位置,终点 位置);
split();
toLowerCase();
toUpperCase();
第十四章 强大的正则表达式
第十五章 XML数据处理
1.简明语法:1.XML语法必须有一个根目录,而且只能有一个。
2.开始标记和结束标记必须承兑出现。
3.所有的XML必须合理的嵌套。
4.XML大小写敏感。
5.XML命名必须遵守下面的规则
元素的名字可以包含字母数字和其他字符
不能以数字或标点开头
不能以xml的各种大小写开头
不能包含空格
6.每个元素可以带有自己的属性,属性值必须使用""标记
7.XML注释写法:<!--注释内容-->
8.XML文档中的所有文本都会被解析器解析,只有<![CDATA[忽略内容]]>内的被忽略。
2.创建:var kindaXML:XML =
下面按正常写就行...
3.操作
使用 .和 @
第十六章 异常和错误的捕捉与处理
第十七章 目前主要的API概览
第十八章 事件发送和处理
DOM3事件的执行流程:注册侦听器、发送事件、侦听事件、一处侦听器。新特色:事件流机制与视图元件紧密结合、侦听器优先级、侦听器弱引用
注册和移除事件:
kingda.addEventListener();
kingda.removeEventListener();
自定义事件:public class OrderEvent extends Event{
public static const ORDER_DISHES:String = "点菜";
private var _dishes:Array;
定义get set
}
发送事件时,定义个OrderEvent对象,修改内容,dispatchEvent(该对象)第十九章 网络通信基础
var request:URLRequest = new URLRequest();
request.url = "http://www.flash.com";
request.data = variables;
var loader:URLLoader = new URLLoader();
loader.load(request);
第5部分 视觉编程
第二十章 视觉编程精要
可以显示的对象,既包括可以直接看见的文字、图片、视频等,也包括显示对象容器。
等级:最上层是舞台,舞台下面是当前SWF主类的实例,最后才是自定义的。root指向的是当前主类的实例!
显示列表:出现在显示列表中的显示对象才显示,不然不会被渲染。
划分:统一于DisplayObject,是否可接受互动事件,是否为容器。
所有显示对象可以发送事件,但要注意非InteractiveObject。
显示对象容器:Sprite、Loader、Stage。而MovieClip是Sprite子类多了个时间轴。
第二十一章 显示对象的一些基本概念
显示属性:X、Y、width、height、scaleX、scaleY、rotation、alpha、visible。
非显示属性:name、parent、root、stage、mask。
21.1 矢量图Graphics
方法:单一填色:beginfill、绘制直线:lineTo、drawCircle、drawRect、moveTo。
var circle:Shape = new Shape;
circle.graphics.beginFill(0xff0000);
circle.graphics.drawCircle(100,100,40);
circle.graphics.endFill();
addChild(circle);
21.2 位图Bitmap
矢量图体积小但耗资源,位图耗内存,计算少。
Bitmap的像素信息存储在BitmapData里。
属性:bitmap.bitmapData、data.clone();
21.3 遮罩
obj.mask = msk;
addChild(obj);
addChild(msk);
如果缩放舞台或移动遮罩对象时遮罩一同改动,必须把遮罩加入显示列表。
21.3 文本TextField
type:默认动态文本,可以设为输入文本,静态文本只能cs创建。
htmlText:"<u><a href = 'event:geturl| > </a></u>;
文本框中追加文本用高效的appendText();
碰撞检测:hitTestObject(对象)、hitTestPoint(x,y,shapeFlag)默认false为边框,true为实际像素;
第二十二章 容器、深度管理
addChild()、addChildAt()、removeChild()、removeChildAt(),contain()、swapChild()、setChildIndex()
从0开始自动管理,列表前面的显示前面,sprite类画的始终在最后面不归显示列表管理。
MovieClip是动态类,Sprite是密封类。
访问:cs中创建的可以用点号访问。
第二十三章 Flash CS:库元件的绑定与Stage、文档类
Flash CS中为AS导出,在类里写上完整路径,就和AS中的类绑定了。不需要在类里重新加载swf简单了。
如果影片剪辑类元件在满足没有指定绑定类,帧中没有加入脚本,没有手工输入子元件的name属性的条件下下,编译器就将该元件作为一个普通的MovieClip对象进行编译;
如果不符合上述条件编译器则自动生成一个MovieClip子类,将舞台上的剪辑元件编译成该类的实例。
第二十四章 显示编程与事件、人机交互
事件流机制:捕获阶段、目标阶段、冒泡阶段。
target:发生事件的显示对象;currentTarget当前侦听事件的显示对象,一般为容器。
24.1 鼠标事件
单击:MouseEvent.CLICK、MouseEvent.DOUBLE_CLICK
按键状态:MouseEvent.MOUSE_UP、MouseEvent.MOUSE_DOWN
鼠标悬停或移开:MouseEvent.ROLL_OVER、ROLL_OUT
鼠标移动:MOUSE_MOVE 鼠标滚轮:MOUSE_WHEEL
属性:1>鼠标坐标:localX、localY,舞台坐标:stageX、stageY
2>按键是否按下。
24.2 键盘事件
键盘只有两个事件:KeyboardEvent.KEY_DOWN KeyboardEvent.KEY_UP
按键信息存在属性里:按键信息:KeyCode、CharCode
辅助键是否按下:altKey、ctrlKey、shiftKey
按键区域:keyLocation
24.3 拖曳、鼠标跟随
只有Sprite及其子类才可以创建拖曳效果
第二十五章 动画编程
Timer的定时更新不易与flash的屏幕更新同步,经常产生延迟情况;一般用Event.ENTER_FRAME。
Timer:
var timer:Timer = new Timer(500,20);//500ms,20次
timer.addEventListener(TimerEvent.TIMER, moving);
timer.addEventListener(TimerEvent.COMPLETE, completeTimer);
timer.start();
enter_frame:
this.addEventListener(Event.ENTER_FRAME, draw);
特效类:Tween、TransitionManager
第二十六章 Flash CS和flex的协同开发