(原创)AS 3.0 斥力球教程
效果:
当鼠标移动跟圆球比较近的时候,圆球会与鼠标产生斥力,鼠标越近斥力就越大。当球撞到墙壁会产生无视摩擦的反弹效果。
斥力球思路:
1.模拟斥力:就是使球的移动方向与鼠标的移动方向相同,用EnterFrame事件让球产生运动效果,EnterFrame具有连续渲染画面功能,所有能展现动画效果。计算出鼠标与球的相对位置,用向量计算的方法计算出鼠标移动和球移动的X轴和Y轴移动距离和方向,从而让鼠标和球的移动方向一致。
2.计算斥力:因为斥力会随鼠标与球的距离减小而增大,所以用鼠标和球的距离来模拟斥力,估算鼠标和球的最大距离,就是舞台对角线的长度,我估算了一下,最大距离不会小于800,我让小球的移动速度大概在0至8之间,距离为三位数,乘以0.01来得到一个一位数。小球受到的斥力是逐渐增大的,因此小球做的变加速运动,用刚才向量计算的方式求出小球的加速度,从而让小球做变加速运动。
3.模拟碰壁:判断碰壁的四种情况,一旦碰壁就让小球的X轴的运动方向和Y轴的运动方向反向,然后让小球的坐标重设为边缘坐标。
4.模拟摩擦力:小球反弹后,如果不加斥力,会做减速运动到停止,让小球速度循环乘以一个小于0的数,一直达到计算机的计算精度极限,就会使速度逐渐为0。
斥力球制作步骤:
1.建立一个Ball类,Ball类包含球的属性。
2.建立ShowBalll类,对球进行初始化,添加一个球到舞台上。
3.ShowBall类中的构造函数添加EnterFrame事件循环执行onHit函数。onHit函数球受斥力运动实现的主函数。让斥力初始值为0,让小球开始不会运动。
4.获取鼠标坐标和球的坐标计算dis(球和鼠标的距离)。
5.d为鼠标对球产生斥力的范围,当鼠标与球的距离小于d的时候产生斥力。
6.计算斥力chi=8-dis*0.01,斥力随着距离的减小而增大。
7.通过斥力得到加速度,把斥力分解为x轴方向和y轴方向的两个分力,通过chi*(b.x-mouseX)/dis和chi*(b.y-mouseY)/dis得到分力的方向和大小。
8.fraction为摩擦力,摩擦力为0.95,speedX*=fraction,使小球做减速运动。
9.小球与墙壁碰撞做反弹运动,当碰壁时对于的作用力方向变为反向,得到反弹效果。