0

發現了很多物理引擎,但沒有直接適合我的需求。 我試圖尋找一種簡單的方法來推拉箱子,包括碰撞檢測,這種碰撞檢測在移動時尊重下一個相鄰網格。移動一個盒子與另一個在分裂方面尊重Three.js中的下一個相鄰網格

一些用例來理解:

除了箱1箱全部是可移動的。

推或拉箱4到西:

  • 應該移動框3向西碰撞。
  • 應該箱3和4無法偏西方向移動時,箱3分命中框2.

推2,3或4向北:

  • 當它擊中盒2應停止,因爲方框1不可移動。

應該不可能用箱子推或拉2個碰撞箱。

也許不是最好的問題......我可以從零開始編寫這樣一個邏輯,但這會以相當複雜的代碼結束:)我不知道是否沒有人解決過類似的問題。 是否存在使用現有物理引擎或three.js插件實現這種邏輯的簡單方法?

enter image description here

希望的問題是制定好足以讓任何人都可以理解。 也許更容易如果你知道着名的巨石短跑遊戲。

Boulder Dash 1 可能在兩個方向上移動兩個岩石。

enter image description here 不可能移動一塊石頭。

對我來說,它應該是可以移動2碰撞岩石/立方但不3.

回答

0

很簡單,它比物理更多地關於幾何和邏輯...如果我理解你的簡化世界。

對於boulderdash(或者推箱子)的情況,運動是基於平鋪的,當你準備移動角色時,首先檢查運動方向上的相鄰的。它可以是可行走的或被可移動物體(或者也可以是牆壁)佔據。如果有可移動的物體,那麼你檢查下一個相鄰的瓷磚。如果它是可行的,那麼意味着可移動的物體的確是可移動的。否則,該可移動物體當前不可移動。

在類似於您的非鋪砌方案中,您會檢查與第一個方框的碰撞,並在發生這種情況時檢查下一個碰撞方框的存在,添加第一個方框的大小的新碰撞點,在運動的方向。

+0

@ ruberto-valdunciel很簡單^^。謝謝 。我已經意識到這種方法導致一個新的問題在http://stackoverflow.com/questions/28752761/collision-detection-fails-in-three-js。無論如何,我會接受你的答案。 – 2015-04-17 06:46:58

2

所以基本上你想讓某些物體在不同點上不動。你可以用physi.js來做到這一點。只需增加物體的質量,使其相對於其他物體變得如此重以至於不可移動。

+0

到目前爲止,這是最好的答案。但我的應用程序是基於移動的,我認爲實現物理引擎對於該用例來說太複雜了。相反,我寫了自己的代碼來檢測下一個鄰居網格。 – 2015-02-28 10:02:30

+0

在你的問題中,你清楚地表明你正在研究涉及物理引擎的解決方案,但現在看來你排除了這些解決方案。所以我的回答適合這個問題。如果您同意,請接受。順便說一下,我發現物理引擎實際上導致簡單的乾淨的代碼。優於數百行手動部分實現。如果其他人要查看或支持你的代碼,那很重要。 – 2015-02-28 14:40:00

相關問題