关于flash的angleBounce 有角度回弹实现步骤:
思想就是把问题归结到我们可以解决的平面回弹,那么就是将ball的速度(向量)旋转,以及ball与侧面起点的差额(向量)的旋转,旋转结束之后就速度发生改变,然后旋转回来。
1.获得基本信息:
//获得角、正弦和余弦 var angle:Number = line.rotation * Math.PI / 180; var cos:Number = Math.cos(angle); var sin:Number = Math.sin(angle); //获取小球相对于线条的位置 var x1:Number = ball.x - line.x; var y1:Number = ball.y - line.y;
2.旋转的公式:
//旋转坐标 var x2:Number = cos*x1 + sin*y1; var y2:Number = cos*y1 - sin*x1; //旋转速度 var vx1:Number = cos*ball.vx + sin*ball.vy; var vy1:Number = cos*ball.vy - sin*ball.vx;
3.判断是否碰撞:
if(y2 > -ball.height / 2){ y2 = -ball.height / 2; vy1 *= bounce; }
4.碰撞完成之后旋转回来:
//将所有东西旋转回去 x1 = cos*x2 - sin*y2; y1 = cos*y2 + sin*x2; ball.vx = cos*vx1 - sin*vy1; ball.vy = cos*vy1 + sin*vx1; ball.x = line.x + x1; ball.y = line.y + y1;
这段代码写在Event.ENTR_FRAME事件的处理器中,就可以完成功能,但是这段代码是可以优化的,意思就是说旋转速度以及旋转回原位的这个动作,是可以放在判断是否碰撞的语句中的,可以节约大量的CPU。