利用FlashDevelop 4.0.1 RTM版本在安装的时候就直接下载相关的flex sdk, flashPlayerDebugger, flashAIRSDK,简单方便。
1:addChild相当于2.0里面把库中的元件载入到场景中,用了addChild后我们画的那个圆就显示在场景中了,与之对应的是removeChild,是从场景中删除
2:库中的元件与类的链接?
我猜,元件就好比是类的实例,给元件取名,是为了方便我们程序来引用。
3:文档类?
文档类就相当于第一帧的位置,这样我们就不用在FLA文件里写代码了,所有代码都写在AS文件里,达到了界面和代码的分离。
4:利用反射方式来加载元件,主要是利用 getDefinitionByName(元件名称:string)
for(var i=1;i<=2;i++)
{
var ClassReference:Class = getDefinitionByName("Mc"+i) as Class;
var instance:MovieClip = new ClassReference();
addChild(instance);
}
5: 事件监听方式:在as3.0中,一律用addEventListener
_btn.addEventListener(MouseEvent.CLICK,btnClickHandler);
function btnClickHandler(event:MouseEvent): void
{
//点击后代码
}
经常有些侦听我们用过一次后可以就不会再用了,那么为了节省资源,我们要将这些侦听删除掉,要侦除侦听这们用这样的方法:
_btn.removeEventListener(MouseEvent.CLICK,insClickHandler);//删除侦听
6:消息机制(类与类之前也是可以侦听的),dispatchEvent就是用来发送消息的。如果我们写的这个类不继承Sprite是不能用的,凡是从EventDispatcher继承下来的类就可以使用这个方法.
package net.smilecn
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class MyClass extends Sprite
{
public function MyClass()
{
addEventListener(MouseEvent.CLICK,clickHnadler);
}
private function clickHnadler(event:MouseEvent):void
{
dispatchEvent(new Event(Event.CLOSE)); //发送Event.CLOSE消息
}
}
}
将库中的一个MC链接到MyClass这个类上(方法参数前面章节)再修改之前的文档类:
package net.smilecn
{
import flash.display.Sprite;
import flash.events.Event;
import net.smilecn.MyClass;
public class MainForm extends Sprite
{
private var myClass:MyClass;
public function MainForm()
{
myClass = new MyClass();
addChild(myClass);
myClass.addEventListener(Event.CLOSE,closeHandler); //侦听Event.CLOSE消息,一旦接受,closeHandler触发
}
private function closeHandler(event:Event):void
{
trace("你收到了myClass的消息");
}
}
}
FLASH的EVENT类里面自带的CLOSE事件,其实就是个字符串,我们也可以自己定义字符串,比如这样:
dispatchEvent(new Event(“message”));
myClass.addEventListener("message",closeHandler);
7:事件传递参数
在as3.0版本中,发消息的时候传参数,要去写一个类去继承Event这个类,
package net.smilecn
{
import flash.events.Event;
public class MyEvent extends Event
{
private var _object:Object;
public function MyEvent(type:String,object:Object):void
{
super(type);
_object=object;
}
public function get param():Object
{
return _object;
}
}
}
类继承了Event这个类,在构造方法里有一个super(type),super的意思是执行父类的构造方法,也就是执行Event的构造,
type是消息的类型,就是消息的名字,一个字符串,object就是我们要传的参数要用到的一个变量,是一个对象,我们知道
对象是很方便的,可以存储1到多个参数,下面是一个GET方法,通过param这个名字去取_object这个对像的值。
怎么用这个MyEvent类?
package net.smilecn
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import net.smilecn.MyEvent;
public class MyClass extends Sprite
{
public function MyClass()
{
addEventListener(MouseEvent.CLICK,clickHnadler);
}
private function clickHnadler(event:MouseEvent):void
{
//{a:100,b:200},这个参数就是我们传进去的对象,这个对象有两个属性值,
//一个叫a,值为100,一个叫b,值为200;
dispatchEvent(new MyEvent("myClassMessage",{a:100,b:200}));
}
}
}
8:MVC模式
MVC模式是‖Model-View-Controller‖的缩写,中文翻译为‖模式-视图-控制器‖。MVC应用程序总是由这三个部分组成。
Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有
依赖的View都会自动更新。 MVC模式能使界面(Viwe)和数据(Model)能有效的分开,由控制器(Controller)去控制。
Model按照我的理解是数据,就是所有的共用数据都是存储在Model里面的
9:Loader加载类:
Loader 类可用于加载 SWF 文件或图像(JPG、PNG 或 GIF)文件
//Main.fla文件的文档类,导出 Main.swf 文件
package net.smilecn.studyLoader
{
import flash.display.Sprite;
public class MainForm extends Sprite
{
public function MainForm():void
{
}
public function getMainParam(param:String)
{
trace("得到从外层来的参数:",param);
}
}
}
//sub.fla文件的文档类,载入Main.fla的导出文件
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;
private var subLoader:Loader;
subLoader = new Loader();
subLoader.load(new URLRequest("Main.swf"));
subLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
subLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
private function completeHandler(event:Event):void
{
trace("文件已经加载完成");
addChild(subLoader);
event.currentTarget.content.getMainParam("你好"); //event.currentTarget.content实际上就是加载进来的那个SWF(Main.swf)
}
10:URLLoader与后台交互[举例:可以实现配置文件的读取]
package net.smilecn.studyURLLoader
{
import flash.display.Sprite;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
public class MainForm extends Sprite
{
public function MainForm():void
{
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("cfg.txt")); //3: cfg.xml
loader.addEventListener(Event.COMPLETE,loadCompleteHandler);
}
private function loadCompleteHandler(event:Event):void
{
//1:原样读取文本信息
trace(event.currentTarget.data); //读取cfg.txt文件的内容
//2:以URL格式读取参数信息。cfg.txt信息: msg=hello!&ip=localhost
var vars:URLVariables = new URLVariables(event.currentTarget.data);
trace(vars.msg);
trace(vars.ip);
//3: XML方式读取:cfg.xml信息:<?xml version="1.0" encoding="UTF-8"?> <root> <msg>hello!</msg> <ip>localhost</ip> </root>
var vars:XML = new XML(event.currentTarget.data);
trace(vars.msg);
trace(vars.ip);
}
}
}
11: 共享资源库
前面我们介绍了载入文件,我们经常要加载的可能就是SWF文件了,我们在实际使用中还会把SWF文件作为共享资源库,就是把一些
元件放到一个SWF文件里,这样只要加载它的文件都可以使用它的库里面的元件,这样做的好处在于我们可以使主文件更小一点,
当多个文件使用相同的元件时,就可以共用了。
1:先建一个FLA文件,在库里面建几个元件,这里我们建一个MC,一个Button,然后导出,MC我们起名叫MyMc,Button我们起名叫MyBtn,
FLA文件叫library,发布生成一个library.swf文件。
2:再来建立主文件,建一个FLA文件,起名叫:loadLibrary,再来建立一个文档类MainForm.as:
package net.smilecn.loadLibrary
{
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.SimpleButton;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
public class MainForm extends Sprite
{
private var loader:Loader;
private var myMc:MovieClip;
private var myBtn:SimpleButton;
public function MainForm()
{
loader = new Loader();
loader.load(new URLRequest("library.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
public function completeHandler(event:Event)
{
myMc = getLibMc("MyMc");
addChild(myMc);
myBtn = getLibBtn("MyBtn");
addChild(myBtn);
myBtn.x=100;
myBtn.y=100;
}
public function getLibMc(name:String):MovieClip
{
var classReference = (loader.contentLoaderInfo.applicationDomain.getDefinition(name) as Class);
return ((new (classReference) as MovieClip));
}
public function getLibBtn(name:String):SimpleButton
{
var classReference = (loader.contentLoaderInfo.applicationDomain.getDefinition(name) as Class);
return ((new (classReference) as SimpleButton));
}
}
}
}