Re: [問題] 寫一個砲台遊戲
※ 引述《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
推
05/04 23:42, , 1F
05/04 23:42, 1F
→
05/04 23:42, , 2F
05/04 23:42, 2F
討論串 (同標題文章)
Flash 近期熱門文章
PTT數位生活區 即時熱門文章