作者yf2923850 (Mu)
看板Flash
标题Re: [问题] 写一个炮台游戏
时间Thu May 3 22:13:13 2007
※ 引述《clifflu ( 木 头)》之铭言:
: 如果一条直线方程为 L1(x,y) = ax + by + c = 0 的话
: 那麽平面上的点 P (x0, y0) 到该直线的距离为:
: R(P,L1) = abs(L1(x0, y0)) / sqrt(a^2 + b^2)
: 如果那个球 (圆) 的圆心在 x0, y0, 半径又为 r0 的话
: 只要 R(P, L1) < r0 就试为击中 这是一种做法
: 但若你的物体是更复杂的几何图型,或/且 需要在三维空间运作的话
: 难度就更高了些 :p
: 我想到的方法有:
: 1) 将物件 O 化约为数个子物件 O1, O2, .... On, 且各子物件均为简单型状,
: (如球型,椭圆球,长方体等等) 再检查火炮是否通过任一子物件
: 2) 将各物件进行座标转换,自迪卡尔直角座标系统转为观查者为中心的极座
: 标 (r, theta, phi), 再将目标取其在此座标系统下,任一 r=k 之投影
: 又因炮弹直进,且由原点发出,故能简易判断该直线 (或射线) 是否与特定
: 球面投影上之型状相交。
刚刚试着弄弄看,问题还是很头大....orz
我试着这样写....
-----
act_mc是炮台 foe是目标
-----
act_mc.onMouseDown = function() {
this.gotoAndPlay(2); //射击特效
a = (_root._ymouse - this._y); //方程式的a
b = (_root._xmouse - this._x); //方程式的b
c = -(a*_root._xmouse + b*_root._ymouse); //方程式的c
s = foe._x; //目标x座标
n = foe._y; //目标y座标
r = Math.abs(a*s+b*n+c)/Math.sqrt(a ^ 2+b ^ 2); //目标到方程式的距离
if (r <200){
foe.gotoAndPlay(2); //目标消灭
}
};
-------
看了影片除错的功能 变数r的值一直都非常大
麻烦高手解惑 orz
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.131.127.251
1F:推 fridayjason:有个方法是再多作一个判定用的物件 让炮台去算假装的 05/04 23:42
2F:→ fridayjason:作hitTest 也就是说子弹作两层 敌机作两层 这样 05/04 23:42