会员注册 | 加入收藏 | 设为首页
  • 返回首页
  • 新闻动态
  • 服务项目
  • 设计作品
  • 自选模板
  • 各地分站
  • 给我留言
  • 域名空间
  • 企业套餐
  • 项目外包
  • 设计杂谈
  • 招聘精英
  • 付款方式
  • 退款原则
  • 关于我们
  • 最新动态
  • 设计杂谈
  • 项目外包
  • 会员专区
  • 合作伙伴
  • 帮助
  • 企业网站
  • VI设计
  • 画册设计
  • 包装设计
  • 动画制作
  • 软件开发
  • 其它作品
  • 域名空间
  • 平面设计
  • 网站策划
  • 动画制作
  • 软件开发
  • 网站维护
  • 印刷喷绘
  • 网站改版
  • 企业模板
  • 行业模板
  • 个人模板
  • 其它模板
  • 广东站
  • 新疆站
  • 河北站
  • 上海站
  • 北京站
  • 西安站
  • 给我留言
  • 在线订单
  • 合作加盟
  • 招聘精英
  • 联系我们
  • 帮助
  • 产品促销
  • >>更多
  • 最新动态
  • >>更多
  • 项目外包
  • >>更多
  • 合作伙伴
  • >>更多
  • 产品推荐
  • >>更多
  • 新闻动态 -> 设计杂谈 -> 详细信息
  • 速度和加速度在flash中的描述
  • 浏览次数: []发表时间: [2008-7-11]
  • flash中,我们习惯做的补间动画,如果不加缓动,在前后两帧中改变元件的位置,就可以看到元件的移动动画,具体说是元件匀速运动的动画。

    在flash中,是将元件在每帧设置一个新的位置来实现动画的,如让一个元件从位置0运动到位置10,设flash在每帧设置元件坐标相差为1,那么在第一帧时元件在位置0,第二帧时在位置1,第三帧时在位置2......这样就看到元件的匀速运动了,这个就是坐标差就是速度了。下面来看看用代码来实现的,物体匀速移动,设舞台上有一小球ball_mc,空剪辑ctrl_mc:

    //使小球沿x轴以每帧2像素的速度匀速运动
    //定义x方向的速度
    var vx = 2;
    ctrl_mc.onEnterFrame = function(){
        ball_mc._x+=vx;
    }
    //使小球沿y轴以每帧2像素的速度匀速运动只需将上面的_x属性换成_y属性

    上面是给定x或者y方向的速度大小,让flash来实现物体运动,现在给定一个任意角度angle,和一个任意大小v的速度,如何让flash来实现物体的运动呢?~思路如下:

    将速度v从角度angle方向分解到flash坐标系统的x,y方向,然后再分别将x,y方向的速度加到物体的x,y坐标上。代码如下:如果v=5,angle=30,则就是小球沿30度角的方向以每帧5个像素运动。

    var angle:Number;
    var v:Number;
    ctrl_mc.onEnterFrame = function(){
        var radians = angle*Math.PI/180;
        //分解速度
        var vx = v*Math.cos(radians);
        var vy = v*Math.sin(radians);
        ball_mc._x += vx;
        ball_mc._y += vy;
    }


    现在要使物体加速运动,那又如何实现呢~如:使小球初速度为0,以加速度为2px/f*f的沿x方向运动。思路如下:

    在flash中要实现加速度,可以在每帧加入一个常数到速度,这样就实现了加速度,如:

    v=0;
    a=2;
    ctrl_mc.onEnterFrame = function(){
        v+=a;
        ball_mc._x+=v;
    }
    //在y方向同理。

    物理中我们知道,给物体施加一个力,对物体就会产生一个加速度,现在我们假设给定一个方向angle,给定一个力force(如:在30度方向上给小球施加一个10N的力),那么flash又该如何描述小球运动呢?~设小球初始速度为0;

    思路:仿照速度,可以将力分解为x,y方向,分别加到x,y方向的速度,然后再将速度分别加到球的x,y方向的坐标上。
    var angle:Number;
    var force:Number;
    var vx = 0;
    var vy = 0;
    ctrl_mc.onEnterFrame = function(){
        var radians = angle*Math.PI/180;
        //分解力,得出x,y方向的加速度
        var ax = force*Math.cos(radians);
        var ay = force*Math.sin(radians);
        //将加速度分别加入速度上
        vx += ax;
        vy += ay;
        //加入坐标
        ball_mc._x += vx;
        ball_mc._y += vy;
    }

    总结:要实现物体匀速运动,只需将速度v沿x,y轴分解所得的vx,vy分别加入到物体的_x,_y属性,即:vx = v*Math.cos(angle);vy=v*Math.sin(angle);ball_mc._x+=vx;ball_mc._y+=vy;要实现物体的加速运动,只需将加速度a沿x,y轴分解所得的ax,ay分别加入到物体速度在x,y轴的分量vx,vy上,然后再将vx,vy分别加到物体的_x,_y属性,即:ax = a*Math.cos(angle);ay=a*Math.sin(angle);vx+=ax;vy+=ay;ball_mc._x+=vx;ball_mc._y+=vy;

  • ---本文章由 零感视觉传媒 添加整理
  • 相关文章:
24X5客户服务
给我留言
在线订单
点击交谈或留言
分站快速导航
★ 广东站
★ 新疆站
★ 河北站
★ 上海站
★ 北京站
★ 西安站
版权所有[C]零感视觉传媒  违者必究  客服热线:029-86528267/029-87027617    Email:imstylist@126.com      陕ICP备06010416号      法律顾问:张金巧