Flash实例鉴赏:夏日可乐饮水机(3)
三、细部处理和ACTION控制
1.在场景的所有层的最下面新加入一个“ACTIONS”层,双击进入,输入ACTION:
_root.lock_take = false;
_root.full = false;
这里预先设定了两个变量,意思分别代表杯子被拿起的LOCK_TAKE和水满变量FULL。
2.打开“OBJ”层锁定,双击“CUP_DRAG”进行细部编辑;在“CUP_DRAG”内新建一个层“TEST”,在该层用“OVAL TOOL”画一个圆形,转换成标号“CUP_TEST”,“INSTANCE NAME”同样是“CUP_TEST”;(如图12)
(图12)
3.在“CUP_DRAG”内新建一个层“WATER”,位于最上方,其第1帧是空帧(“F7”),用手动绘画的方法,从第2帧开始到第11帧做一个水慢慢满的连续帧动画,新建一个层“ACTIONS”位于最上方,从第1帧到第11帧连续插入空帧,并在每帧输入ACTION: STOP();(帧排列形式如图13)
(图13)
ACTION 控制
4.取消“CUP”层锁定,单击“CUP”,并按“CTRL+ALT+A”输入ACTION:
on (release) {
if (not _root.full) {
if (not this.took and not _root.lock_take) {
_root.exp_1._visible=false;
_root.exp_2._visible=true;
_root.exp_3._visible=false;
_root.exp_mov_1._visible=true;
this.took = true;
startDrag (this);
}else{
if (_root.cup_drag.cup_test.hitTest(_root.table_hittest.hitpoint)) {
_root.lock_take = true;
_root.start_bt_m._visible=true;
_root.exp_2._visible=false;
_root.exp_4._visible=true;
_root.exp_mov_1._visible=false;
_root.cup_ready=true;
}else{
_root.exp_2._visible=false;
_root.exp_3._visible=true;
_root.cup_ready=false;
}
this.took = false;
stopDrag ();
}
}
}
当鼠标被按下并且是弹起的时候会判断水满没满(FULL变量),接着会判断用户拿没拿起杯子(TOOK变量)和杯子放好没有(LOCK_TAKE变量),如果满足,那么会出现第2个提示信息EXP_2,箭头动画EXP_MOV_1会出现,杯子也会被锁定在鼠标上,既然是拿起了杯子,那么TOOK变量肯定是TRUE真的;而如果没有被拿起来的时候还会出现2种情况,即放好了位置(用HITTEST测试2个小圆圈的贴近程度)和没放好,如果放好了,那么一切第一阶段就结束了,会使LOCK_TAKE为真,这样用户就不可以拿起杯子,从而按照下一步指示进行操作(EXP_4),否则,会出现错误信息(EXP_3),说明你没有放好位置,会等待用户重新激活判定。
5.按“CTRL+E”回到主场景,双击“START_BT_M”进入编辑状态,然后单击“START_BUTTON”,按“CTRL+ALT+A”输入ACTION:
on (press) {
if (not _root.full) {
_root.watering._visible = true;
_root.start_bt_m.lock_fill = true;
}
}
on (release) {
if (not _root.full) {
_root.watering._visible = false;
_root.start_bt_m.lock_fill = false;
}
}
输入好以后,按“CTRL+E”回到主场景,单击“START_BT_M”,按“CTRL+ALT+A”输入ACTION:
onClipEvent (load) {
this._visible = false;
this.lock_fill=false;
this.fill_level=0;
}
onClipEvent (enterFrame) {
if(this.lock_fill) {
this.fill_level++;
_root.cup_drag.gotoAndStop(this.fill_level % 10000 + 1);
if(this.fill_level % 10000 >=12) {
this.fill_level=0;
this.lock_fill=false;
_root.full=true;
_root.start_bt_m._visible=false;
_root.retry_m._visible=true;
_root.sun._visible=true;
_root.mask._visible=true;
_root.watering._visible=false;
_root.exp_4._visible=false;
_root.exp_5._visible=true;
_root.cup_drag._xscale=_root.cup_drag._yscale=300;
}
}
}
这里主要是用户按下控制按钮流水的过程。首先当读取的时候这个影片片断不会显示的,并且设定了流水控制变量(LOCK_FILL)为假,FILL_LEVEL是当前刻度即水流状态,激活流水是靠用户按下按钮以后的一刹那激活的(LOCK_FILL 为真),水流“WATERING”也会变成可见的,但是,用户抬起鼠标就会重新锁定流水(LOCK_FILL为假),水流也不会可见,大致形成了流水的动画。
流水的时候,是采用取模跳转控制的方式操作的,如果当前的FILL_LEVEL对10000取模有结果,那么肯定会跳转到大于0的CUP_DRAG内的帧,就形成了流水般的样子,当然只要用户抬起鼠标,它会随时停止计数从而暂停流水。
当流水流到最后当然会出现结束信息,放大杯子,并且让最后成功的信息出现(EXP_5),RETRY按钮出现,太阳出现,就形成了一个夏日般的样子。
6.按“CTRL+E”回到主场景,双击“RETRY_M”进入编辑,并输入“RETRY”按钮的ACTION:
on (release) {
this._visible = false;
_root.lock_take = false;
_root.full = false;
_root.exp_1._visible = true;
_root.exp_5._visible = false;
_root.mask._visible = false;
_root.sun._visible = false;
_root.cup_drag.gotoAndStop(1);
_root.cup_drag._xscale=_root.cup_drag._yscale=100;
_root.cup_drag._x=50;
_root.cup_drag._y=58;
}
这里是当用户想重新开始的时候需要做的一些初始化设定,水满(FULL)/杯子被拿起(LOCK_TAKE)要变成假,信息1出现(EXP_1)并且设定回“CUP_DRAG”最初始的设定。
7.回到主场景,解除“EXPLAIN”层、“OBJ”层、“MASK”层、“WATER”层的锁定,单击“EXP_1”,按“CTRL+ALT+A”输入ACTION:
onClipEvent (load) {
this._visible = true;
}
这样,它被读取的时候会出现。
其他的MOVIE CLIP:EXP_2、EXP_3、EXP_4、EXP_5、MASK、WATERING、EXP_MOV_1、SUN、RETRY_M的ACTION相同:
onClipEvent (load) {
this._visible = false;
}
它们被读取的时候会被隐藏的。
四、测试影片效果
点击组合键“CTRL+ENTER”测试影片效果,一个有趣的饮水机就在夏日的阳光下出现了。
源文件下载