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);
 }

 

 

posted @ 2010-07-30 00:54  ywxgod  阅读(741)  评论(0编辑  收藏  举报