殿堂之路学习笔记(4)_第四部分_Flash Player 主要API


第四部分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");







posted @ 2011-12-31 00:16  jason_xiao  阅读(161)  评论(0编辑  收藏  举报