收藏本站 收藏本站
积木网首页 - 软件测试 - 常用手册 - 站长工具 - 技术社区
积木学院 > 网页设计 > Flash > 正文

Flash MX 新的闪烁世界(第二天)

来源:互联摘选 日期:2008-07-29 23:05

Flash MX – 新的闪烁世界(第二天)

  今天的天气依然是那么的明朗,可是可怜的我还是逃不过加班的命运,难道2002年流行加班?不过不管我多么疲劳,回家后抓起Flash MX后还是兴奋不已……

  第一天我们知道,新的Flash MX在程序员/设计师的界面上作的很好,甚至考虑了他们之前的切换问题。你所要做的只是选择Window-> Panel Sets->xxxx,由于接下来我们的需要,这个xxxx你需要选择Developer(你的分辨率)。

  新改进的Flash ActionScript是根据欧洲的ECMA-262编码标准写的,在Flash MX中,已经剔除了Flash 5和以前版本的所有不符合这个标准的语句和代码,剩下的一些有的被优化有的继续保留了,也就是说这些代码从此进入了Macromedia的历史(该公司也表示建议使用标准化的语句)。

  新的Action Script有两类:单独功能的语句,例如运算符,变量,属性,方法,流程控制语句等;而另一类既是面向对象和新加入的部件概念,主要分4小类:Core;Movie;Client/Server;Authoring。前三类重新对v5的对象进行了分类,并加入了Stage、System、Microphone,Camera,NetStream,NetConnection,Video等新的对象,Button,TextField,TextFormat等常用的物体现在也可以通过ActionScript来作为基本对象控制;而且v5常用的LoadVars()已经被单独分离出来作为对象并且具有很多常用的方法和错误状态,这是值得兴奋的呢……还有就是配合Authoring 工具使用的Authoring类别,由于Flash MX整合了Generator(又一个不幸进入历史),加之,以后Flash MX的服务器端将由ColdFusion MX担任,可见今后的Flash网络可以配合自身具有一些Generator的一些功能来实现强大的网络体系结构。

  今天呢,作为重点部分的既是作为交互作用的LoadMovie()Action和LoadVars对象,我们也通过实例的形势来看看其魅力如何。

LoadMovie();LoadMovieNum();

  你还在Flash5中为了动态导入JPG图片而痛苦地把上百个图片转换成Swf格式呢吗?现在请停止那机械劳动吧。升级为Flash MX之后,我们可以尝试下面的例子:

首先,用Rectangle工具在场景中适当的位置画一个正方形,接着按F8把它转换为标号,按钮。(图1)



(图1)

接着,选中这个按钮,并按“F2”打开Action面板,输入下面的AS:


on (release) {
loadMovieNum("boy.jpg", 1);
}


注意,源文件和jpg文件需要放入同一目录中,接着图片会在按钮释放的时候被读入场景的第1 level中。(图2)



(图2)

  测试结果表明Flash MX的LoadMovie宣称支持JPG为实事,OK,继续我们研究它的所有。

LoadMovie()和LoadMovieNum()有什么不同?如果你在Flash 5中没有解决这个问题,下面的修改会给你满意的解释

修改刚才的按钮Action:


on (release) {
if (mc == undefined) {
_root.createEmptyMovieClip("mc",1);
}
mc._x=random(300);
mc._y=random(300);
mc.loadMovie("boy.jpg",1);
}


  由于懒惰,甚至连多做一个空MovieClip你都不想的时候,那么上面的if语句可以帮你,当场景中不存在mc这个MovieClip的Instance时,引入Flash MX的新MovieClip的方法createEmptyMovieClip()来动态产生一个MovieClip,叫做“mc”并置入Depth1。然后用loadMovie方法读入jpg文件,你可以发现MovieClip的loadMovie方法是没有Num字样的,上面问题的答案自然就可以解释为不读入MovieClip中的Swf/Jpg是loadMovie,反之既是loadMovieNum,上面最后一条语句也可以写为loadMovie(“boy.jpg”,”mc”);。

  下面做一个恶作剧,来让按按钮的人不知道如何按自己的按钮。这个时候你可以加入上面已经加入的设置_x/_y属性的Action。结果我们发现一个奇怪的事情,当图片出现在按钮之上的时候,该按钮的事件还是会被响应,而没有达到我们恶作剧的效果,不知道这个属于Bug还是MM早看透了我的恶作剧,不过下次我们可以尝试动态产生两个按钮,看看相应优先级(未来的某一天,我们会讲到Button对象)。(图3)



(图3

LoadVars对象

  新的LoadVars对象看起来更像是一个针对变量处理的XML对象的简化版。它通过传输符合application/x-www-urlform-encoded标准的MIME格式的字符串来和ASP/PHP/JSP服务器交互信息。

  LoadVars对象的主要方法有send()、load()、sendAndLoad(),我简单作了一个服务器/客户的交互结构来说明他们的用法。

首先,随便做三个控制按钮,上面写着区分他们的文本即可。 接着,我们按F2打开场景的Action面板,输入这段Action:


varsobj=new loadvars();
tempvars=new loadvars();
tempvars.onLoad=function(loaded){if (loaded){trace("loaded");this.saved=1;debugTrace(this)}};
aimUrl="http://localhost/";
debugTrace = function (what) { for (var elm in what) {trace(elm+"="+what[elm])}};


  首先创建两个loadVars对象,第一个是发送用,第二个是接收用。既然第二个是接收数据用的,当然就要有onLoad事件,这个onLoad事件默认状态不存在,所以创建它并得给它一个处理函数。定义服务器地址aimUrl,最后加入自定义的排错函数察帮助看结果。


第一个按钮的Action:(Send)


on (release) {
varsobj.send(aimUrl+"savevar.php");
debugTrace(varsobj);
}



发送数据是不改变当前状态的,而且是没有任何返回值的,我们可以通过debugTrace来查看结果。


第二个按钮的Action:(Load)



on (release) {
varsobj.load(aimUrl+"putvar.php");
debugTrace(varsobj);
}



loadVars对象读入数据的方式是异步传送,既是如果当前接收到的变量相同则覆盖,不同则接收,互不影响,结果通过debugTrace判断。


第三个按钮的Action:(sendAndLoad)


on (release) {
tempvars.saved=0;
varsobj.sendAndLoad(aimUrl+"savevar2.php?saved=1",tempvars);
}



  和我们熟知的XML对象一样,sendAndLoad对象需要有一个接收的loadVars对象来接收服务器的返回数据。这时,onLoad的作用会体现出来

服务器端

  我用PHP简单的写了三个对应请求的.php文本,你可以copy下面的文本。


putvar.php:
< ?
echo "a=1&b=2&c=3";
? >
savevar.php:
//save function
? >
savevar2.php:
< ?
if ($saved==1) echo "saved=2";
? >


Ok,所需要的一切就绪,那么我们可以看看测试结果:(图4)



(图4)

  结果没有什么可以新意,还是那句话,既是XML对象的简化版。不过,这样的结构在需要速度的前提并处理不到严谨的文本结构时可以有效利用。

可以trace(varsobj.load(false));的返回值居然是true(冷汗……),现在我想我更加确定load的可靠性了……

  对小型的Flash网站来说,新改进的loadMovie可以善加利用,可以有效的减少用户下载时间和你的制作时间;而对于速度要求非常高但没有条件作专业数据库的人呢,loadVars对象应该会让你满意,或者作个什么聊天室留言板都不是什么难事。

  唉……天晓得未知的bug有多少,我还未检测sendAndLoad是否还有非安全读入的bug。不过乐观的是Flash MX在扩展性和官方服务上作的很好,相信中后期的Flash MX将是一个完善的开发工具。(目前Macromedia正在做对J2EE和.NET的支持)

源文件:点击下载

(出处:www.Gimoo.net)

推荐阅读

 

热点信息

 
强悍的草根IT技术社区,这里应该有您想要的!
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP备05050695号