zoukankan      html  css  js  c++  java
  • ActionScript学习笔记(七)——缓动和弹性运动

    缓动和弹性运动算是高级运动刚开始就接触到的,就缓动的使用方式就有很多的变化。所以这两个也是我今天总结的一个重点。只是对公式做一个总结,也好以后的查证。为国庆这几天的也找点事情做。

    1、缓动

    var dx:Number = targetX - sprite.x;
    var dy:Number = targetY - sprite.y;
    
    vx = dx * easing;
    vy = dy * easing;
    
    sprite.x += vx;
    sprite.y += vy;

    物体的缓动到目标点,我们根据上面的公式会发现先物体会无限接近目标点,但是不可能真正到达不标点,一直这样下去是对CPU资源的损耗,所以什么时候让缓动停止,也应该注意。我们都知道物体显示位置的最基单位是像素。而像素是不可能小于1的,所以我们根据这一点来判断什么时候停止缓动。

    if(Math.abs(targetX - sprite.x) < 1 || Math.abs(targetY - sprite.y) < 1){
         sprite.x = targetX;
         sprite.y = targetY;
        //do other things 
    }

    当然缓动并不只适用于运动方面,颜色,透明度,旋转等都会用到缓动。至于一些复杂的缓动,大致原理也是基于以上的基本公式,主要就是多了一些影响点。

    2、弹性运动

    我们看着弹性运动很复杂,其实仔细梳理下来,弹性运动主要是加速度在发生不断的变化。所以我们可以很好的理解弹性公式。弹性的变化和展示有很多种,所以在此也详细总结一下,弹簧链,多点弹性,弹簧连接多个物体的代码示例。

    2.1 弹性(二维弹性只是多了一个方向上的速度而已)

    var dx:Number = targetX - sprite.x;
    
    var ax:Number = dx * sprint;
    
    vx += ax;
    
    sprite.x += vx;

    2.2 高级弹性效果

         2.2.1 弹簧在哪里?

         为了以后更好的展示,我们最好能够将弹簧显示出来,这里我们通过一根线来说明弹簧的变化。只需要在弹性位移变化下面加上这个代码就可以了,方法如下:

    graphics.clear();
    graphics.lineStyle(1);
    graphics.moveTo(sprite.x,sprite.y);
    graphics.lineTo(mouseX,mouseY); //这里给出的是鼠标垫为弹簧节点

         2.2.2 弹簧链

         弹簧链的原理并不复杂,相当于下一个物体的支点是上一个物体的位置,所以们最好的方法还是对弹簧方法进行一些封装。这样我们只需要一次添加相应的物体位置即可,当然第一个点得于鼠标位置为参照。

    //前者为添加的物体,后者为影响点
    moveBall(sprite_1,sprite_2.x,sprite_2.y){
         //弹性公式套用
        var dx:Number = sprite_2.x - sprite_1.x;
        var dy:Number = sprite_2.y - sprite_1.y;
       
        vx += dx * spring;
        vy += dy * spring;
    
        sprite_1.x += vx;
        sprite_1.y += vy;
    }

        2.2.3 多点弹性

        方法同上,只不过影响物体变成了同一个,我想这就很好理解了,通过一个循环来便利影响点的作用,然后添加最终生成位移偏移。很好解决。循环如下:

    for(var i:int = 0;i < numHandles; i++){
      var handle:Ball = handles[i] as Basll;
       var dx:Number = handle.x - sprite.x;
       var dy:Number = handle.y - sprite.y;
       
       sprite.vx += dx * spring;
       sprite.vy += dy * sprint;
    }
    sprite.x += sprite.vx;
    sprite.y += sprite.vy;

         2.2.4 物体间弹性影响

         也就是相互是自己的引用点,两个球就得写一对相互影响,三个球就得写3对相互影响。所以还是很好理解的。在此就不多提了。

  • 相关阅读:
    程序的局部性原理2
    程序的局部性原理
    ROM
    学习Spring Security OAuth认证(一)-授权码模式
    mybatis*中DefaultVFS的logger乱码问题
    maven生命周期绑定要点
    spring security antMatchers相关内容
    JSTL
    什么是CSS hack?
    Java中获得当前静态类的类名
  • 原文地址:https://www.cnblogs.com/flashbird/p/3347657.html
Copyright © 2011-2022 走看看