频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Flash中定点移动的解决方案分析

来源: 作者:vim(闪吧BBS) 出处:巧巧读书 2007-10-29 进入讨论组
下一页 1 2 3 
  Flash中的定点移动是指某个物体移动到指定的地点这样一个常规的动作。看似简单,但他所涉及的因素还是比较多的,如:总路程、速度、路面光滑程度以及物体内在性质等等。
由于我们是用Flash来实现这种定点移动,在这可视的动画制作工具面前我们就不用考虑那么多了。

  今天我主要是说说利用鼠标指定地点后影片就从原点移动到指定点这样的一个动画实例。这个实例主要是以AS脚本来实现,虽然是比较简单,但我会以三种不同的实现方法来实现,这三种方法分别是:累积路径法、剩余路径法和移动次数法(这些名字是自己取的)。为了节省事件和降低难度,我这里主要是实现水平方向的定点移动,并且是匀速运动。

  在讲各种方法之前我先讲一下此实例的组成结构。结构非常简单,整个主场景就只有一个名字为obj的影片剪辑对象,当然剩下的工作就是要写脚本来实现。

  一、累积路径法

  顾名思义,就是物体每次移动的距离我们把他累积起来,然后通过对比总路径长度来判断是否已经到达目的地的方法。

  我们先来看看实现的脚本:
var mouseListener:Object=new Object();
var totalLength:Number=0;
var pileLength:Number=0;
var speed:Number=5; //匀速运动,此是定值。
mouseListener.onMouseDown=function(){
       _root.totalLength=obj._x-_root._xmouse;
       _root.onEnterFrame=function(){
              if(_root.pileLength+_root.speed<=Math.abs(_root.totalLength)){
                     if(_root.totalLength<0){
                            obj._x+=_root.speed;
                     }else{
                            obj._x-=_root.speed;
                     }
                     _root.pileLength+=_root.speed;
              }else{
                     if(_root.totalLength<0){
                            obj._x+=Math.abs(_root.totalLength)-_root.pileLength;
                     }else{
                            obj._x-=Math.abs(_root.totalLength)-_root.pileLength;
                     }
                     _root.pileLength=0;
                     _root.totalLength=0;
                     delete _root.onEnterFrame;
              }
       }
}
Mouse.addListener(mouseListener);



      从上面的源码中的Mouse.addListener(mouseListener);可以看到我们注册了鼠标的按下侦听事件。每次鼠标点下去的时候,我们的侦听事件就会给触发。这侦听事件里面我们求出了obj对象离指定点的总路径totalLength。之后我们给主场景赋予了onEnterFrame事件,然obj对象移动到指定位置。从代码上来看我们可以看到变量pileLength是充当累积路径用的,每当obj移动一个步长,那么pileLength就累积起一个步长的长度。有人可能会不大清楚if(_root.pileLength+_root.speed<Math.abs(_root.totalLength))这句代码的意思,其实这是当obj接近目的点并且在下一次移动就到达目的点的时候,如果剩余的距离不够一个步长那么就走完剩余的距离即可。也就是else分支的代码,最后我们还要将pileLength复位和删除掉onEnterFrame事件,以便为下一次移动作准备。这就是累积路径法,下面我来说一下剩余路径法是如何解决这个问题的。

巧 巧 读 书:http://www.qqread.com/flash/2007/10/s372150.html 更多文章 更多内容请看数字化校园网解决方案大型实用解决方案专题应用解决方案专题,或进入讨论组讨论。
下一页 1 2 3 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章