作者KawasumiMai (魔物を討つ者)
看板Flash
標題Re: [問題] HitTest跟彈性碰撞
時間Fri Mar 4 22:40:15 2011
※ 引述《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:碰撞有考慮球的大小 03/04 23:44