flash中物体运动基础之六方向与角度

接着第五部分障碍物,有时候在某些特别的情况下需要球体能通过某个障碍物,并不是所有的障碍物都需要阻止球体运动,例如有一竖直障碍物当球体从左到右通过时能通过,但从右到左通过时,却不能通过,那该如何做呢?此时最容易想到的是判断球体的运动方向,根据球体前后连个x坐标即可以知道它是从左到右运动还是从右到左运动。这种做法可以解决问题,但遇到特殊的要求就无能为力了,例如障碍物有一定的角度,要求球体在一定角度范围能才能通过,那此时就需要考虑球体的方向了。下面的例子中允许球体从左向右通过竖直障碍物。

在flash中0度为右水平方向,90度在向下方向,180度为左水平方向,270为向上方向,如上图:要使球体只能从一边(左到右)通过障碍物,那么他的角度必须要在0-90或者270-360度的范围内。

计算球体的角度,可以从球体的x,y方向的速度来取得。下面是主要代码:

计算球体的角度:

var angle:Number = Math.atan2(vy, vx);
rotation = angle * 180 / Math.PI;

判断运动方向并碰撞检测:

if (obstruction1.hitTestObject(_ball)&&(_ball.rotation>90&&_ball.rotation<270))
 {
    _ball.reset(_ballInitX, _ballInitY);
 }

延伸上面的条件,可以要求球体在某一个角度的区域内通过障碍物。

除了从角度来限制球体的运动外还可以从球体的速度来考虑,例如当球体的速度大于5m/s时,可以通过障碍物,否则不能通过。

计算球体的速度:

v=Math.sqrt(_ball.vx*_ball.vx+_ball.vy*_ball.vy);

当球体的速度小于5时不能通过障碍物,如下:

if (obstruction1.hitTestObject(_ball)&&v<5)
 {
    _ball.reset(_ballInitX, _ballInitY);
 }

作者:ywxgod
E-mail:给我发邮件
出处:http://ywxgod.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/ywxgod/p/1788359.html