package flashrek.example{
public namespace flashrek= sucai.linux-cn.com;
}
然后在AAA.as文件中的代码为:
package flashrek.example{
import flashrek.example.flashrek;
public class AAA {
function AAA() {
var b:BBB=new BBB();
//flashrek::NStest();
}
flashrek function NStest() {
trace("namespace test");
}
}
}
//package外的类、命名空间不能默认且只能是internal的,且仅能为在此package内使用。
//package外是不能使用public关键字的。
internal class BBB {
function BBB() {
trace("BBB");
var c:CCC=new CCC();
}
}
class CCC {
function CCC() {
trace("CCC");
}
}
接下来再看运行结果: import flashrek.example.AAA;
import flashrek.example.flashrek;
var a=new AAA();
a.flashrek::NStest();
//输出:
BBB
CCC
namespace test
由此我们可以看出,通过a.flashrek::NStest();这样的方法,我们可以访问到NStest方法,而其他地方是无法直接访问到这个方法的。
在上例中大家发现,namespace很像一个类。确实有点像:)但namespace可以在package外,class内进行定义,而且也可以用public、internal等来进行访问控制。
比如去掉上例中的flashrek.as,而把AAA.as改成如下:
package flashrek.example{
public class AAA {
function AAA() {
var b:BBB=new BBB();
flashrek::NStest();
}
flashrek function NStest() {
trace("namespace test");
}
}
}
//package外的类、命名空间不能默认且只能是internal的,且仅能为在此package内使用。
//package外是不能使用public关键字的。
namespace flashrek= "www.flashrek.com"
internal class BBB {
function BBB() {
trace("BBB");
var c:CCC=new CCC();
}
}
class CCC {
function CCC() {
trace("CCC");
}
}
在这里namespace flashrek 定义在package 外,它只能在package 级别访问到。因此用a.flashrek::NStest();是错误的。
全新的加载(Loading)机制
做一个loading预加载的效果相信大家都已经非常熟悉了,不管是用onEnterFrame还是setInterval,还是更高级的 MovieClipLoader。可当开始用AS3的时候,便连一个最简单的loading都无从下手了。是不是AS3中的loader更加复杂,难以控制呢。其实不是的,在AS3中引入了一个全新的类LoaderInfo,这个类可作用于任何的可显示对象(display object),这个对象里包含了加载过程检测、加载地址、加载对象的内容、加载对象总字节数(和加载过程中的字节数)、加载对象的宽度高度等等非常多的内容(内容太多了,更多的大家可以去看帮助)。
有2种方式可以访问LoaderInfo对象:
1)访问flash.display.Loader对象的contentLoaderInfo属性;
2)任何一个可显示对象(display object)都有loaderInfo属性;
注意:每个SWF文档的主类的实例有loaderInfo属性,每个Loader有loaderInfo属性,同时它有一个contentLoaderInfo属性,通过这个属性你可以访问到Loaded对象的loaderInfo。具体可以看下图:

下面还是老习惯,来例子示范。首先来一个loading外部文件的例子:
var request:URLRequest = new URLRequest("flashrek.swf");
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
function loadProgress(event:ProgressEvent):void {
var percentLoaded:Number = event.bytesLoaded/event.bytesTotal;
percentLoaded = Math.round(percentLoaded * 100);
trace("Loading: "+percentLoaded+"%");
}
function loadComplete(event:Event):void {
trace("Complete");
}
loader.load(request);
addChild(loader);
这里要注意loader的load方法只接受URLRequest对象作为参数;另外就是ProgressEvent类,比较简单,看帮助就好了。
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一篇:
在Flash动态文本框中加载HTML格式文本 下一篇:
和Flash初学者详谈Loading的制作
【文章评论】
【收藏本文】
【推荐好友】
【打印本文】
【我要投稿】 【论坛讨论】