当前位置:软件学习 > Flash >>

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

  源文件下载

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,