|
第四部分Flash Player 主要API |
|
|
第十七章 主要API概览 |
|
|
1.AS3.0 API的分类 |
1.Flash Player提供的API,都是以本机代码的形式存在的,native
code,执行效率比一般的AS3要高
在flash.*里面,也包括将来将要应用的AIR
三大重点:事件机制 网络通信 显示编程
2.Adobe官方产品提供的API
Flex API mx.*中
Flash CS3 API
fl.*中 分为四大类 包括组件架构,动画效果,Motion
XML,视频
3.第三方提供的API
官方组织开发的:
1.corelib 里面有crypto images
serialization.json utils
2.Flex Component Kit for
Flash CS3
3.as3flexunitlib .测试驱动框架
开源社区:www.osflash.org
code.google.com www.riaforge.org
sf.net
商业组件:
1.Papervision3D创建3D场景、镜头等
|
|
|
|
|
第十八章 事件 |
--10:20--10:40 |
|
1.Event所在的类 |
1.与事件处理机制相关的类是在flash.events.*中
在AS3.0中没有线程加载的概念,事件机制就是异步处理的一个重要补充。
AS3.0中相当数量的API都集成了事件。
|
|
2.目的 |
DOM3处理机制可以让交流数据的双方脱耦
|
|
3.重要定义 |
数据对象的发送者,称为事件发送者,Event
dispatcher
接受事件的对象,称为事件侦听器 Event listener |
|
4.事件的主要内容 |
事件的类型 事件的目标 事件的相关数据
type target data |
|
5.DOM3 事件机制包含4个步骤 |
注册侦听器,发送事件,侦听事件,移除侦听器。 |
|
6.事件机制新特色 |
1.所有的显示对象都可以接受和发送事件。因为它们都是DisplayObject或其子类的实例。而其又是EventDispatcher的子类,引用了事件流机制。
2.侦听器优先级别
3.侦听器弱引用。如果侦听器设为弱引用,而且在程序运行的时候只剩下了这一弱引用指向侦听器,那么垃圾回收器可以不理它,直接就把侦听器回收了。这说明AS3是多么地重视资源管理和效率。但请还是养成习惯removeEventListener()方法移除侦听器 |
|
7.Event类的实例 |
1.type target
2.currentTarget eventPhase bubbles
都与事件流机制相关
3.cancelable
是一个布尔值。表示这个事件引起的默认动作是否可以被取消。这个属性一般是和preventDefault()这个方法结合在一起使用的。
4.以上这些都是只读属性,除了type,bubbles,cancelable 可以由7谈判桌
用户在构造函数中指定初值
|
|
8.常量 |
Event还有26个静态字符串常量 定义了26种事件类型 |
|
9.Event的构造函数 |
public function Event(type:String, bubbles:Boolean
= false, cancelable:Boolean = false){}
推荐的做法是在当前的事件类中定义事件类型的静态字符串常量,再将常量赋值给type属性。 |
|
10.Event的方法 |
1.clone formatToString toString 这3种是一些工具性的方法
这个clone()方法一般不需要我们手工调用,当我们将一个事件对象重复发送时,EventDispacher类会自动调用clone方法,产生这个事件对象的拷贝。因此在自定义事件类中,要注意重写clone()方法,并加上新增的属性。
toString
是返回对象表示的值的字符口中形式。如果要自定义事件类,那么重写toString时,可以使用formatToString这个方法在返回的字符串中加入新的事件类型属性
2.isDefaultPrevented prevnetDefault 和上面的cancelable
结合使用,用来阻止事件的默认行为发生。
默认行为是指一些系统内定义的事件发生时自动做出的行为。
3.stopImmediatePropagation stopPropagation
用来阻止事件的传播 |
|
11.自定义事件类 |
1.什么时候自定义事件:当需要在事件对象中加入额外的属性或方法时。否则使用new
Event("新事件名称")即可
2.记着要重写 clone 和 toString 方法 |
|
12.侦听器 |
1.侦听器必须是Function
2.事件发送者必须是EventDispatcher类或其子类的实例。只有事件发送者才能侦听事件,才能注册侦听器。 |
|
13.检测事件侦听器 |
1.hasEventListener()
willTrigger() 都可以检测当前的事件发送者是否为某事件类型注册了侦听器。 |
|
14.自定义发送事件的3种方式 |
1.继承EventDispatcher(有两种方式,事件派发者的方法被执行时,派发了一个事件;事件派发者直接派发了一个事件)
2.复合EventDispatcher对象 ()
什么时候选用?
一般发生在某个复杂的类中,这个类可能因为已经继承了其他类,无法再继承EventDispatcher.如果仅仅是因为这个原因,那么更加建议使用实现
IEventDispatcher接口来进行事件发送。但如果原因不止如此,比如我们不愿意这个类不是一个单纯事件发送类,而是在执行某个方法,比如
doSomething时附带的发送一些事件,这些事件发送者往往是这个类的组成部分,一些更小的类,比如一些小的显示对象。记住,只有不需要把这个类的
实例看成是EventDispatcher或IEventDispatcher类型时,才能考虑使用这种复合EventDispatcher对象的方式发
送事件,
3.实现IEventDipatcher接口
什么时候用?
当这个自定义类能够被当成IEventDispatcher数据类型,从而被其他代码认可为正宗事件发送者
方法是设计一个装饰器模式,
具体的方法是由于IEventDispacher需要实现5个接口,addEventListener
dipatcherEvent willTrigger removeEventListener hasEventListener
所以我们装饰类也必须实现这5个接口。在被包装的方法中还可以加入其他逻辑。 |
|
|
|
|
|
|
|
第十九章 网络 |
14:20 |
|
1.所在的包 |
flash.net.* |
|
2.用URLRequest构建通信请求对象 |
var request:URLRequest = new URLRequest();
request.url = "http://www.flash-mx.com/mm/greeting.cfm";
request.method = URLRequestMethod.GET
传值对儿数据时:
var variables:URLVariables = new
URLVariables("name=foo&age=28&sex=male");
request.data = variables;
传XML时
request.data = loginXML.toXMLString();
request.contentType = "text/xml"; |
|
3.发出数据请求 |
1.var loader:URLLoader = new URLLoader();
.loader.load(request);
2.返回的数据会放在URLLoader对象的data属性中
3.可以通过URLLoader中的dataFormat属性来判断传回来的数据是哪种类型的
URLLoaderDataFormat.TEXT
URLLoaderDataFormat.BINARY
URLLoaderDataFormat.VARIABLES
4.URLLoader对象会发出6种事件
loader一调用有Event.OPEN
加载过程中,ProgressEvent.PROGRESS 包含下载字节数信息
加载完成,包含Event.COMPLETE
加载完成或失败之前,会发出HTTP状态事件HTTPStatusEvent.HTTPSTATUS
加载失败,发出IOErrorEvent.IO_ERROR
加载内容不合安全规则,发出SecurityErrorEvent.SECURITY_ERROR
|
|
4.读取三种数据的例子 |
要自己去练习 |
|
5.用URLLoader加载swf的原因和实例 |
如果使用Loader那么就需要从缓存中加载很多次动画。如果使用ByteArray对象,那么只需要多生成几个Loader对象就可以了。
var urlRequest:URLRequest = new
URLRequest("lfa/lindedClass.swf");
var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.addEventListener =
URLLoaderDataFormat.BINARY,completeHandler);
function completeHandler(e:Event):void{
var
content:ByteArray = event.target.data as ByteArray
var
loader:Loader = new Loader()
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,convertHandler);
loader.loadBytes(content);
}
function convertHandler(e:Event):void{
addChild(e.target.loader as
Loader);
}
|
|
6.navigateToURL() |
1.public function
navigateToURL(request:URLRequest. window:String = null)
2.window的常用字符串有四种 _self _ blank _parent
_top
|
|
7.sendToURL |
如果只想提交数据,不想返回数据的话
public function sendToURL(request:URLRequest):void |
|
8.如何知道swf文件属于哪一个沙箱 |
Security.sandboxType;
|
|
9.安全沙箱的四种类型 |
Security.REMOTE 远程网络域
Security.LOCAL_WITH_FILE 本地文件域
Security.LOCAL_WITH_NETWORK 本地网络域
Security.LOCAL_TRUSTED 本地信任域
两条基本规则:
1.位于相同安全沙箱中的资源始终可以互相访问
2.远程沙箱中的swf文件始终不能访问本地文件和数据 |
|
10.跨域文件crossdomail.xml |
<cross-domain-policy>
<allow-access-from
domain="*.kingda.org">
<allow-access-from
domain="*">
</cross-domain-policy>
|
|
11.脚本访问权限 |
1.Security.allowDomain("*.kingda.org"); |
|
|
|
|
|