5D艺术网首页
商城
|
资讯
|
作品
|
博客
|
教程
|
论坛
登录
注册
加为好友
发短消息
来自:好人村
性别:先生
最后登录:2012-08-07
http://jh7086.5d.cn/
大坏人
首页
|
新闻
|
话题
|
博客
|
相册
|
艺术作品
|
社交关系
|
留言板
|
社交圈
2004/09/28 | 碰撞检测——研讨
类别(Flash进修)
|
评论
(0)
|
阅读(195)
|
发表于 17:14
注:本贴来自闪吧之holybozo,
原贴
1。原理
假设两个球中一个是不动的,并且两个球的MC的注册点都在中心
要判断球有没有碰到,只要算出球A和球B间的距离是否大于球A和球B的半径只和
var disX=ballB._x-ballA._x; // 球A和球B在x轴上的差距
var disy=ballB._y-ballA._y; // 球A和球B在y轴上的差距
var diss=Math.sqrt(disX*disX+disY*disY); // 球A和球B的距离
var sum_radii=ballA.radii+ballB.radii; // 球A和球B的半径之和
if(diss<=sum_radii){ // 判断距离和半径之和的大小
trace("两球碰到了");
}
2。优化
上面就是判断碰撞的基本条件,我们可以稍微换一下,把Math.sqrt去掉,直接使用平方来做,也是一样的,
因为sqrt实在是浪费资源
// 修改为:
var disX=ballB._x-ballA._x; // 球A和球B在x轴上的差距
var disy=ballB._y-ballA._y; // 球A和球B在y轴上的差距
var diss=disX*disX+disY*disY; // 球A和球B的距离
var sum_radii=ballA.radii+ballB.radii; // 球A和球B的半径之和
if(diss<=(sum_radii*sun_radii) ){ // 判断距离和半径之和的大小
trace("两球碰到了");
}
3。难题
当小球速度过大,会导致球A盖在球B的上面,更可怕的是,球A一次性串过了球B.
所以像上面那样的判断,是不够的.
0
评论
Comments
日志分类
首页
[163]
Flash习作
[85]
Flash进修
[33]
Flash推荐
[16]
Flash涂鸦
[4]
听~音乐
[9]
我滴地盘er
[16]