学院首页 软件应用 编程开发 创意设计 认证培训 软件论坛
Flash Fireworks Dreamweaver Photoshop CorelDraw Illustrator FreeHand 3DsMAX AutoCAD

您的位置:学院 >> 创意设计 >> Flash >> Flash中定点移动的解决方案分析


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


  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

  • 第1页:累积路径法
  • 第2页:剩余路径法
  • 第3页:移动次数法
  •   二、剩余路径法

      与累积路径法相反,他是通过求出剩余的路径的长度,如果剩余路径长度为零就代表已经到达目的点。

       让我们先看看源码吧:

    var mouseListener:Object=new Object();
    var totalLength:Number=0;
    var speed:Number=5; //匀速运动,此是定值。
    mouseListener.onMouseDown=function(){
           _root.totalLength=obj._x-_root._xmouse;
           _root.onEnterFrame=function(){
                  if(_root.totalLength>=_root.speed){
                         if(_root.totalLength<0){
                                obj._x+=_root.speed;
                                _root.totalLength+=_root.speed;
                         }else{
                                obj._x-=_root.speed;
                                _root.totalLength-=_root.speed;
                         }
                  }else{
                         If(_root.totalLength<0){
                                obj._x+=_root.totalLength;
                         }else{
                                obj._x-=_root.totalLength;
                         }
                         _root.totalLength=0;
                         delete _root.onEnterFrame;
                  }
           }
    }
    Mouse.addListener(mouseListener);


       整段代码中我们可以清楚地看到obj对象每走一个步长,总路径长度都在减少,但由于方向的不同这里做了不同的处理。直到总路径长度为0后我们就结束onEnterFrame事件。

  • 第1页:累积路径法
  • 第2页:剩余路径法
  • 第3页:移动次数法
  •   三、移动次数法

      前两个方法都是利用路径的长度来进行判断的,而这个方法就像我们出去旅行,计算到达目的地要多长时间一样,把总路径长度按照移动的步长计算出总共要用移动多少次,然后按照移动次数来控制影片的运动。


      先来看看源代码吧:

    var mouseListener:Object = new Object();
    var totalLength:Number = 0;
    var speed:Number = 3;
    var count:Number = 0;
    var spare:Number = 0;
    var position:Number = 0;
    mouseListener.onMouseDown = function() {
           _root.totalLength = people._x-_root._xmouse;
           _root.count = Math.abs(Math.floor(_root.totalLength/_root.speed));
           _root.spare = _root.totalLength%_root.speed;
           _root.onEnterFrame = function() {
                  if (_root.count != 0) {
                         //判断方向
                         if (_root.totalLength>0) {
                                obj._x += _root.speed;
                         } else {
                                obj._x -= _root.speed;
                         }
                         _root.count--;
                  } else {
                         if(_root.totalLength<0){
                                obj._x -= _root.spare;
    }else{
           obj._x+=_root.spare;
    }
                         _root.spare = 0;
                         _root.totalLength = 0;
                         delete _root.onEnterFrame;
                  }
           };
    };
    Mouse.addListener(mouseListener);


      以上代码就是一个按次数移动的方法。其中的_root.spare = _root.totalLength%_root.speed;可能会不理解,其实这是求取不足一次移动的距离,也是剩余的距离不够作为一次移动步长了,最后只要加上这段距离就能到达目的地了。

          如果哪位高手还什么更好的解决方法不妨拿出来共享一下,让大家学习学习。不懂的朋友或者认为我上面的代码有误的朋友(上面的代码都没有在Flash中运行过,只是凭空写出来的)可以联系我跟我讨论,本人先在此谢谢大家了。希望在时间充裕的时候和大家探讨更深入的问题。

    技术文章快速查找

    栏目导航
    软件应用
    ·操作系统 ·杀毒防黑 ·应用软件
    ·聊天软件 ·网络软件  
    Web开发
    ·ASP ·JavaScript ·CGI
    ·JSP ·VbScript ·Web服务器
    ·PHP ·XML  
    开发语言
    ·VB ·VC ·ASP.NET
    ·Java ·C/C++ ·Delphi
    数据库开发
    ·MySQL ·SQL/Access ·PowerBuilder
    ·Oracle ·DB2  
    网站设计
    ·Flash ·Dreamweaver ·HTML/CSS
    ·Fireworks ·FrontPage  
    平面设计
    ·Photoshop ·CorelDraw ·AutoCAD
    ·FreeHand ·Illustrator ·3DsMAX
    媒体动画
    ·Director ·Authorware ·Maya
    ·视频处理    


    相关软件 产品库推荐
    ·笔记本 ·台式机 ·服务器
    ·数码相机 ·手机 ·GPS
    ·DV摄像机 ·MP3 ·MP4
    ·CPU ·硬盘 ·内存
    ·主板 ·显卡 ·显示器
    ·打印机 ·投影机 ·路由器

    还没人留言,抢个先,哈哈!
    对"Flash中定点移动的解决方案分析"的评论 - 快速回贴
    内容:
      [完成后可按Ctrl+Enter发布]

    百度中 Flash中定点移动的解决方案分析 相关内容
    Google搜索中 Flash中定点移动的解决方案分析 相关内容
    雅虎中 Flash中定点移动的解决方案分析 相关内容
    Sogou搜索中 Flash中定点移动的解决方案分析 相关内容

    相关软件 最新回复帖子:

    ·没有mysql支持时的替代方案
    ·一个可以发送附件及HTML格式邮件的PHP类
    ·AutoCAD打造精致三维鸟笼实例详解
    ·Photoshop自定义水晶字特效样式
    ·AutoCAD三维基础实例教程
    ·PS为黑背景长发美女照片抠图换背
    ·用Photoshop自制个性摩托车贴花小经验
    ·轻松几步将美女照片处理为手工素描
    ·巧用Photoshop画笔轻松绘制创意特效
    ·用Photoshop通道将模糊肖像照片清晰化


      相关软件 Flash中定点移动的解决方案分析相关文章
    Flash加载外部文件的各种方法与技巧 Flash动画制作过程概述及时间控制技巧
    Flash动画技巧:动画人物走路的动作规律 Flash电子杂志常用滚动区域控制代码
    在Mozilla和Firefox中实现Flash透明背景 Flash的动态文本如何调用外部文本文件
    让Flash调用符合web标准 消除浏览器影响 Flash AS代码实例:仿贝塞尔曲线控制
    用Flash AS3制作统计饼图动画效果 用Flash AS代码制作按钮弹出窗口
    Flash绘画实例:卡通女孩头像 让Flash动画适应任何分辨率的网页
    深入了解Flash AS中的setInterval方法 关于Flash中注册点与中心点的区别
    详细讲解网页中的Flash弹出网页窗口 有关Flash ActionScript 3编程的总结
    用Flash制作螺旋发散特效动画 Flash制作鼠标点击滚动效果相册
    Flash特效:鼠标触发模糊图片变清晰 用Flash AS编写蝌蚪摆尾特效动画