Re: [問題] 寫一個砲台遊戲

看板Flash作者 (Mu)時間18年前 (2007/05/03 22:13), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串5/5 (看更多)
※ 引述《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
作hitTest 也就是說子彈作兩層 敵機作兩層 這樣
05/04 23:42, 2F
文章代碼(AID): #16EUtwMp (Flash)
文章代碼(AID): #16EUtwMp (Flash)