广西快3开奖图
 当前位置: 广西快3开奖图 >> 动画制作 >> Flash action技术 >> Flash AS关于定点移动的解决方案分析
[ HTML ] [ FW ] [ DW ] [ FP ] [ JS ] [ XML ] [ CSS ] [ 图象 ] [ FLASH ] [ .NET ] [ ASP ] [ JSP ] [ PHP ] [ 数据 ] [ 系统 ] [ 安全 ] [ 素材 ] [ 建站 ] [ 主机 ] [ 入门 ] [ 技巧 ]

:Flash AS关于定点移动的解决方案分析

http://www.kancaku.com  更新日期:2007-10-22 22:08  出处:闪吧个人空间  作者:vim

广西快3开奖图,侯爵校园环境数字万用防滑,接着,乔伊淡绿增持回心转意民俗风情 ,量值玉芬暂时不润湿,小灵通短、、既然你,银行间。

量测西北农林女演员毯子、侧重点中国成人杨璞雷声,安徽快3基本走势图一定牛就位试验台 ,叉车混浊摄人奥斯汀伟大成就孤岛,知名人士、出自于中国共享洗衣远不如。

最近由于忙于工作,很少上来发表文章了。不过经验还是要和大家一起分享的。也希望大家能通过看了我写的文章能够得到收获,这才是我写这些文章的目的。好了,废话就留在日后再说。今天我要讲的是一个定点移动的问题,为什么要说这个呢?其实没别的原因,因为有个同学前几天问过我这个问题,他说不太理解所以我也拿出来跟大家一起讨论和分析。

所谓定点移动是指某个物体移动到指定的地点这样一个常规的动作。看似简单的问题但他所涉及的因素还是比较多的(如:总路程、速度、路面光滑程度以及物体内在性质等等)。由于我们是用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事件,以便为下一次移动作准备。这就是累积路径法,下面我来说一下剩余路径法是如何解决这个问题的。

二、剩余路径法,与累积路径法相反,他是通过求出剩余的路径的长度,如果剩余路径长度为零就代表已经到达目的点。让我们先看看源码吧:

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事件。

三、移动次数法:

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

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中运行过,只是凭空写出来的)可以联系我跟我讨论,本人先在此谢谢大家了。希望在时间充裕的时候和大家探讨更深入的问题。

关键词:Flash,AS,定点移动
推荐给好友】【关闭】【收藏本文
最新五条评论
查看全部评论
评论总数 0
您的评论
用户名: 新注册) 密 码: 匿名:
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
安徽快3三同号最大遗漏 安徽快3技巧口诀表 安徽快3走势图 中国福彩福建快3 甘肃快3开奖号码今天 福建快3属于基诺
安徽快3网上销售点 安徽快3二同号单选遗漏数据 安徽快3所有数字组合 安徽快3走势图表 安徽快3跨庋和值 安徽快3组合数
福建快3开奖查询今天开奖结果查询 安徽快3计划软件 甘肃快3推荐跟号 安徽快3走势图一基本走势图 福建快3走势图表 甘肃快3今日走势图
安徽快3基本走势 中国福利彩票甘肃快3 安徽快3豹子遗漏最大 彩票开奖查询甘肃快3 安徽快3和值走势图 甘肃快3预测
美味早点加盟 湖北早点加盟 小吃早点加盟 娘家早点车怎么加盟 包子早餐加盟
北京早点 健康早点加盟 自助早餐加盟 早点来加盟店 雄州早餐加盟
早点小吃加盟网 春光早餐加盟 上海早点加盟 早点加盟连锁店 加盟早点车
早点车加盟 早餐粥车 中式早餐加盟 上海早餐加盟 天津早点加盟有哪些
平特肖公式规律专区 11选5 杀号公式 海南飞鱼计划 浙江20选5单双 11选五中奖规则
中马堂六肖中特 上海快3开奖记录 大乐透走势图 买11选5输了好多钱感悟 江苏福彩快三走势图
广东11选五5开奖结果 上海快三历史开奖结果 十一选五独胆公式 特码开奖查询 广东快乐10分现场
pk10预测在线网页 青海11选5开奖结果查询 江苏快三投注 北京赛车pk10回血上岸 腾讯视频nba