看板 Flash 關於我們 聯絡資訊
※ 引述《peacedove (林帛亨加油!!!)》之銘言: : 小弟最近在練習HitTest : 因為畫的是球,所以我用算距離的方法來判斷是否碰撞(也有試過用hitTestObject) : 至於彈性碰撞的部分就是很單純的速度互換而已(我假設完全彈性碰撞) : 可是出來的結果有時候會有兩顆球糾纏在一起 : 不知道是我哪邊的想法打結想錯了 : 想來請教一下 : swf : http://www.swfupload.com/view/160469.htm : .as : ball : http://flash-practice.googlecode.com/files/Ball.as : bouncing : http://flash-practice.googlecode.com/files/Bouncing2.as : 程式碼有點醜請多包涵 boucing的部分出了問題 雖然我不確定要怎麼修改 我猜是三顆碰撞的問題 你的判定是當距離小於半徑合時 速度交換 照理說等到下一次就會離開了 不過如果是這樣的 A過去靠近一段距離的B跟C 並且在移動之後同時接觸兩個(咬合深度可能不同) A會因為判斷式跟C或B其中一個交換 然後又跟另一個交換 如此一來交換後的B跟C 其中一個會是A的速度 但是另一個會是原本C或B的速度 而A的速度則是B跟C其中一個 考慮速度跟方向之後 後來A的移動不一定能完全脫離B或C的範圍 只要一次不脫離 兩個就會持續交換速度 B ↙ A→ ↖ C 假設迴圈先判定A跟C 微觀看來 B ↖ ↙ A C→ ↖ B C→ A ↙ 如果有角度問題的話 A跟B中間的夾角可能會因為過小而縱向速度不夠 不知道這個推論對不對 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.84.247.106
peacedove:應該是這個問題沒錯XD 謝謝 03/04 22:43
peacedove:所以這種東西有比較好的寫法嗎XD 一時想不出來 03/04 22:47
dsmwang:其實碰撞發生時應該要做兩件事,不只是交換速度,還要重設 03/04 23:10
dsmwang:位置。讓他們在碰撞發生時不會互相卡住,就沒問題了。 03/04 23:10
peacedove:喔喔 感謝指點 03/04 23:12
KawasumiMai:簡單一點每次交換時直接讓雙方作多一次的反向移動 03/04 23:14
KawasumiMai:複雜一點則在碰撞時設定兩者位置為剛好相切 03/04 23:14
KawasumiMai:前者只要多跑一行,後者可能得算速度xy分量 03/04 23:15
dsmwang:做反向移動可能會產生糾結(我之前試過) 03/04 23:15
dsmwang:比較推重設位置 03/04 23:15
dsmwang:不過也可能是我程式碼寫錯,你也可以都試試看^^ 03/04 23:16
peacedove:不太懂簡單作法的意思@@ 不過重推位置倒是改好了XD 03/04 23:21
peacedove:喔 我看懂了XD 最近腦袋一直打結... 03/04 23:23
peacedove:http://tinyurl.com/4dtcz26 修改完的swf有考慮球的大小 03/04 23:44
peacedove:碰撞有考慮球的大小 03/04 23:44