看板 Flash 關於我們 聯絡資訊
※ 引述《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
fridayjason:有個方法是再多作一個判定用的物件 讓砲台去算假裝的 05/04 23:42
fridayjason:作hitTest 也就是說子彈作兩層 敵機作兩層 這樣 05/04 23:42