快速业务通道

Flash面向对象程序设计的演变

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-13


注:以下引用出自<>,引用已得到本书作者:Luar的允许.如涉及版权问题请与我联系,马上擦除.转贴请注明出处. 本节会以一个粒子运动系统(粒子运动系统其实是大量Movie Clip在一个范围内随机移动,当碰到边界便会反弹)作范例,讲解Movie Clip面向对象程序设计上的改变.
1.全域函数
开发步骤:
先准备好一个Movie Clip ball代表粒子,大量地将它拖到舞台上,输入这些Movie Clip ball实体名称,例如由ball0到ball14.

以美工角度加上时间轴的思考模式,Movie Clip ball会直接在主影片的时间轴上受控制,意思是程序会放在主影片的时间轴时,路径跟所有Movie Clip ball实体是一致的,而这种在主影片的时间轴里程序,是全域程序,因为由_root可以直接访问到.
由于粒子要不停移动,为了使负责移动的程序不停执行,时间轴必须循环播放,不停经过有程序的帧,让粒子移动. 对ActionScript认识较多的美工,会将初始化和移动的程序写成函数,否则可能只是直接地在第1和2帧加入程序.这些函数,路径是_root,视为全域函数;直到现在,大部分Flash开发人员,仍然是以全域函数方法开发应用程序或程序设计互动效果.
良好的程序设计习惯上, 函数是放在第1帧,在图层script加入程序代码, initBall()是初始化函数,计算每个粒子开始时的移动角度,然后分成x 速度和y速度:
以下内容为程序代码:
function initBall()
{
var speed = 10;
for (var i = 0; i {
var dir = random(360)*Math.PI/180;
this["ball"+i].xdir = Math.cos(dir)*speed;
this["ball"+i].ydir = Math.sin(dir)*speed;
}
}
继续加入程序代码,程序设计移动程序的函数:
以下内容为程序代码:
function moveBall()
{
for (var i = 0; i {
//利用共用子表达式删除增加执行速度
var ball = this["ball"+i];
var x = ball._x;
var y = ball._y;
x += ball.xdir;
y += ball.ydir;
if ((x<0 and ball.xdir<0) or (x>292 and ball.xdir>0))
{
//碰到边界便能会反弹
ball.xdir *= -1;
//粒子不可穿过边界,所以极限的位置是边界大小
x = (x<0) ? 0 : 292;
}
else if ((y<0 and ball.ydir<0) or (y>292 and ball.ydir>0))
{
//碰到边界便能会反弹
ball.ydir *= -1;
//粒子不可穿过边界,所以极限的位置是边界大小
y = (y<0) ? 0 : 292;
}
ball._x = x;
ball._y = y;
}
}
在第一帧加入变量ballno,代表粒子总数;最后,调用initBall()函数进行初始化,继续加入程序代码.
以下内容为程序代码:
ballno =15;
initBall();
在第二帧加入程序代码,调用moveBall()函数移动粒子:
以下内容为程序代码:
moveBall();
在第三帧加入程序代码,跳到第二帧循环播放,让moveBall()函数不停地被调用:
以下内容为程序代码:
gotoAndPlay(2);
这个以全域函数编写的粒子运动系统完成,可以测试影片. 特点分析:
全域函数是最容易学习的程序设计技巧,但它有以下的三个问题:
1.面向对象成份很低
在程序设计中,涉及的面向对象概念很少,在图形使用上则达到重用要求(所有粒子实体都是来自同一个Movie Clip元件).
2.缺乏封装性
全域函数将程序代码和图形分离,当需要在别的专案中重用时,必须小心抽出所需的程序代码和图形,封装性完全缺乏.
3.留意Movie Clip路径
全域函数直接控制Movie Clip,假设Movie Clip和全域函数都是在同一个时间轴中(例如:主影片),没有路径问题;但是当受控制Movie Clip是在另一个Movie Clip里,全域函数就要修改受控制Movie Clip的路径,或者将全域函数搬到那Movie Clip的时间轴里去. 2.对像区域函数
区域函数意思

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号