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”测试影片效果,一个有趣的饮水机就在夏日的阳光下出现了。 源文件下载 |