看一下效果先(打开有点慢):
点击浏览该文件 它的效果有:
先是远离观众,一段时间后自动停止,接下来慢慢地靠近观众,单击文字,文字会移动到屏幕中心,并加速靠近,直到超过屏幕范围,“穿过”观众。^_^
制作思路:
基本思路就在于改变文字对象的Z坐标。而对于文字朝观众迎面而来的效果,实例上是将观众所在的位置制作了一个camera对象,来模拟照相机的功能,即文字离观众越近,文字越大,然后不断改变camera对象和文字在Z轴方向上的距离。
首先制作响应鼠标单击的按钮元件,要求该按钮透明。
(1) 新建文档,定义背景为黑色,大小为600*337像素。
(2) 在场景1下创建一个句为txtbtn的按钮元件。
(3) 进入按钮txtbtn的编辑状态,将“点击”帧转换成空白关键帧,使用矩形工具绘制一个边色为无、填充黑色,大小为100*10的矩形,中心对齐舞台中心。
(4) 保持其其余各帧空白,退出txtbtn的编辑状态,Ok!
(1) 在场景下创建一个名为txtline的影片剪辑
(2) 进入影片剪辑txtline的编辑状态,将层1更名为text.
(3) 选择层text的第一帧,使用文字工具在舞台中央创建一个文字对象,保持内容为空。在属性面板中设置该文字对象的属性如图所示,中心对齐舞台中心。
(4) 在text层上新建一个名为button的层,选择该层的帧1,从库中拖曳1个按钮txtbtn的实例到舞台,中心对齐舞台中心,属性面板中实例名为btnSquare
(5) 在button层上新建一个名为definition的层。选择该层的帧1,打开动作面板,写代码 #initclip SpaceWord.prototype.setWord = function(s) {//前面的initialization中的txtword:word; this.txtWord = s;
};
SpaceWord.prototype.setPosition = function(x, y, z) { //前面的initialization {txtword:word,x:x,y:y,z:z}; this.z = z; Object.registerClass("spaceWord", SpaceWord);
#endinitclip
//构造器
function SpaceWord() {
//设置按钮的功能
this.btnSquare.onPress = function() {
//将照想机朝向单词
Object.environment.cam.dx = this._parent.x;//如果被点击就把该文字设为cam的目标
Object.environment.cam.dy = this._parent.y;
Object.environment.cam.dz = this._parent.z+Object.environment.fl*.9;
this.enabled = false;//被单击后就禁用按钮
this._visible = false;//隐藏按钮
};
this.onEnterFrame = this.render;
SpaceWord.prototype = new MovieClip();
SpaceWord.prototype.render = function() {
var zActual = Object.environment.fl+this.z-Object.environment.cam.z;//当this.z=cam.z时并不是说文字充满整个相机。这时文字显示出来的还是14号字体大小。它比例还是100%,并没有放大。
//让单词在相机后移动
if (zActual>0) {
//对象仍旧可见时,则计算其大小
var scale = Object.environment.fl/zActual;
this._x = (this.x-Object.environment.cam.x)*scale;
this._y = (this.y-Object.environment.cam.y)*scale;
this._xscale = scale*100;
this._yscale = scale*100;
this._alpha = 100 - 99 * zActual/Object.environment.fl*.5;
} else {
this.z += Object.environment.fl*2;
this.btnSquare.enabled = true;
this.btnSquare._visible = true;
}
};
this.x = x;
this.y = y;
};
(7) 在库面板中选择影片剪辑txtline,右键菜单选择“属性”命令,在“元件属性”设置,如图:
2编写脚本: this.somewords = "观自在菩萨 行深般若波罗蜜多时 照见五蕴皆空 度一切苦厄 舍利子 色不异空 空不异色 色既是空 空既是色 受想行识 亦复如是 舍利子 是诸法空相 不生不灭 不垢不净 不增不减 是故空中无色 无受想 行识 无眼耳鼻舌身意 无色声香味触法 无眼界 乃至无意识界 无无明亦无无明尽 乃至无老死 亦无老死尽 无苦集灭道 无智亦无德 以无所得故 菩提萨埵 依般若波罗蜜多故 心无挂碍 无挂碍故 无有恐怖 远离颠倒梦想 究竟涅盘 三世诸佛 依波罗蜜多故 得阿耨多罗三藐三菩提 故知般若波罗蜜多 是大神咒 是大明咒 是无上咒 是无等等咒 除一切苦厄 真实不虚 故说般若波罗蜜多咒 即说咒曰 揭谛揭谛 波罗揭谛 波罗僧揭谛 菩提萨婆呵 "; var x = random(600)-300; }
选择主场景的第一帧,写下代码:
Object.environment = this;
//创建一个照相机对象。并设置它的参数初值,包括:x,y,z,dx,dy,dz
this.cam = {x:0, y:0, z:500, dx:0, dy:0, dz:0};
//设置环境常量
this.fl = 1000;
//创建文字所要附在其上的空影片剪辑space
this.createEmptyMovieClip("space",1);
//让文字放在舞台中间。
space._x=300;
space._y=169;
//用数组来存放这些文字
this.wordList = new Array();
this.wordList = this.somewords.split(" ");
//为数组的每个单词创建一个实例
for (n=0;n<this.wordList.length;n++) {
var word = Object.environment.wordList[n];
//随机设置其X、Y、Z、坐标,其中Z坐标代表其深度
var y = random(337)-169;
var z = random(Object.environment.fl*2)-Object.environment.fl;
//创建一个SpaceWord对象的实例
nombre = "word"+String(depth++);
initialization = {txtword: word, x: x, y: y, z: z};
space.attachMovie("spaceWord", nombre, depth, initialization);//把spaceWord附加到space上,新名为nombre,初始为initialization
this.onEnterFrame = function() {
this.cam.dz+=.5;//目标文字一直在前移
//将照相机朝其目标移动,也就是朝文字移动,也就是dx,dy,dz
this.cam.x+=(this.cam.dx-this.cam.x)/10;
this.cam.y+=(this.cam.dy-this.cam.y)/10;
this.cam.z+=(this.cam.dz-this.cam.z)/30;
}
stop();
好了,ctrl+enter!!!!
3。
好了,我来解释一下:
首先,来看Object.environment.fl(也就是后面的this.fl)是什么? 我们先想当文字的Z坐标(cam.dz)和照相机的Z坐标(cam.z)相等会出来什么效果?是不是就是文字“穿过”的那一刻呢?其实不是的,为什么?当cam.dz==cam.z时,文字显示出来的仍然是14号字体,比例并没有改变,而“穿过”时的那一刻cam.z==cam.dz+Object.environment.fl,
Object.environment.fl是我们设定的,用在Z轴上的。它的意义就是,当照相机运动这样一段的距离之后,文字会从100%的比例变大到“穿过”相机的大小。就可以有“穿过”的感觉。
点击浏览该文件


