2013-12-20 60 views
4

首先讓我快速告訴我在嘗試什麼。我正在使用Box2D做類似俄羅斯方塊的遊戲,我知道Box2D在這種情況下可能不是最好的選擇,但我真的需要擁有普通的物理,因爲關卡有障礙物,如果你碰到它們,塊應該旋轉。Box2D基於網格的碰撞

這裏是圖像來演示我的意思。

enter image description here

案例1: 這是我希望它是。

案例2: 這是我的一個想法,只是爲了讓一塊落下點點小的塊大小,使他們很好地融入了空的空間。正如預期的那樣,問題在於該區塊周圍的空地。使它看起來像盒子不屬於那裏。

案例3: 保持下跌片一樣的「牆」塊大小它永遠不會使它成爲空閒空間的塊大小,因爲邊緣碰撞和它保持這樣。

因此,如何讓它適合填充它的空白空間,而不會看起來很奇怪?

編輯:如果我做了下落的物體的尺寸更小,它不會在這種情況下工作: enter image description here

這裏是形象展示我想要什麼樣的行爲:

enter image description here

+0

我會說你可以使用普通的Box2d物理,直到你接近物件的適合位置,然後禁用物理並編寫自己的邏輯,只要它足夠接近就可以補償和阻擋, 。另外http://gamedev.stackexchange.com/可能是這樣一個問題更好的資源 –

+1

我建議不要使用物理引擎。它充滿了問題,你最終會像http://xkcd.com/724/一樣。如果塊可以任意旋轉,你將如何檢測一條線是否被填滿? – Thomas

+0

我不需要檢查一行是否填滿。玩家被他可以容納多少個區塊阻止 –

回答

3

1)在你的身體上使用setFixedRotation(true)。
2)使其比可用空間稍小(從兩側)。將差異變得如此之小以至於看不見效果(但對於box2d來說就足夠了)。

這應該解決您的問題。
邊緣不會碰觸,但如果需要,您也可以嘗試消除摩擦。

注意:
使用物理引擎可能會對您的用例過度使用,但這並不是一個壞主意,因爲如果您正確使用它,您不必做太多事情。
祝你好運。

更新:
1)不要使物體變小。讓它們變瘦。 :)
Small vs Thin 這應該解決您的第一個問題。

2)如果你想要在下一種情況下顯示的行爲,你期望下降時自由旋轉+接觸地面時的正確方向。這兩件事本身就相互矛盾。

我建議重新考慮你的策略。但是,如果你決定以同樣的方式去做,那麼有一些奇怪的方法來實現它(沒有什麼是不可能的,對嗎?)。
我現在能想到的一個方法是實現所有對象始終以最接近的正確方向(外部時刻作爲當前方向的函數)的趨勢。它應該在渲染中更新。它實際上是一個控制系統,但不能保證定位將在碰撞時實現,物理也不會看起來很自然。試着擴大你的想象力,玩得開心。如果你找到更好的方法,我一定會希望看到它。

享受。

+0

但是,如果我使它更小一點,甚至0,0000001%,它將無法在形狀是「U」形,它必須適合中間的其他街區。我編輯了我的問題並添加了解釋圖像。 –

+0

更新是否適合您? –

+0

我還沒有實現它,但我認爲你有一點,這可能是正確的(或唯一的)方法來做到這一點 –