Flash动画教程学习(四)--高级动画2

第九章 碰撞检测

  1. 两种方法:基于对象实际像素;基于对象间的距离
  2. 基于对象实际像素:

1>     hitTestObject方法:测试一个显示对象是否碰撞到另一个

sprite1.hitTestObject(sprite2):如果碰撞返回true//非常不精确,基于矩形检测

2>     hitTestPoint方法:测试一个指定的点是否碰撞到一个显示对象

不适合检测两个精灵之间的碰撞;还是检测点和矩形;

Sprite1.hitTestPoint(100,100);

3>     使用shapeFlag的碰撞测试:检测点和精灵可视图像的碰撞

If(ball1.hitTestPoint(mouseX,mousy,true)):非常准确,但是不一定应用到所有碰撞检测

拓展:两个星星,每个星星五个测试点;对于非常小的精灵可以用上述方法检测

  1. 基于对象间的距离:不是内置方法

Dist = Math.sqrt(x*x + y*y);

关于碰撞的弹性:

  1. 多物体碰撞检测策略:

1>     检查是否有重复碰撞检测、最初的结果是所需要的两倍

物体两两相撞嵌套循环:

for(var i:uint = 0; i < numBalls - 1; i++)

                        for(var j:uint = i + 1; j < numBalls; j++)

2>     其他的碰撞检测方法:

www.gskinner.com

第十章 坐标旋转和角度回弹

  1. 简单的坐标旋转:

                    ball.x = stage.stageWidth / 2 + Math.cos(angle) * radius;

                    trace(ball.x);

                    ball.y = stage.stageHeight / 2 + Math.sin(angle) * radius;

                        angle += vr;

  1. 高级坐标旋转:高效

                    var x1:Number = ball.x - stage.stageWidth / 2;

                    var y1:Number = ball.y - stage.stageHeight / 2;

                    var x2:Number = cos * x1 - sin * y1;

                    var y2:Number = cos * y1 + sin * x1;

                    ball.x = stage.stageWidth / 2 + x2;

                        ball.y = stage.stageHeight / 2 + y2;

  1. 沿角度回弹:

坐标旋转:

x1 = cos * x2 - sin * y2;

y1 = cos * y2 + sin * x2;

反转坐标旋转:

x1 = cos * x2 +sin * y2;

y1 = cos * y2 - sin * x2;

第十一章 台球物理

  1. 质量、
  2. 动量:p = m * v ;
  3. 动量守恒:m0*v0+m1*v1 = m0*v0final+m1+v1final;

KE = 0.5*v2

得出:m0*v02+m1*v12 = m0*v0final2+m1*v1*final2

两个小球相撞:

                             var vx0Final:Number = ((ball0.mass - ball1.mass) * ball0.vx + 2 * ball1.mass * ball1.vx) / (ball0.mass + ball1.mass);

                             var vx1Final:Number = ((ball1.mass - ball0.mass) * ball1.vx + 2 * ball0.mass * ball0.vx) / (ball0.mass + ball1.mass);

                             ball0.vx = vx0Final;

                             ball1.vx = vx1Final;

                              

                             ball0.x += ball0.vx;

                             ball1.x += ball1.vx;

 

 

posted @ 2012-04-09 16:16  tinytiny  阅读(300)  评论(0编辑  收藏  举报