2013-04-08 37 views
0

最近我一直在嘗試創造一些我一直想要的東西,但從來沒有技巧和時間去做 - 一個電腦遊戲。更準確地說,是我最喜歡的許多遊戲之一的致敬/克隆。從簡單的事情開始,我決定創建一個基於惡魔城系列的經典2D平臺。難以在花栗鼠中設置簡單的矩形碰撞

作爲一名Ruby程序員,我決定使用Gosu。然後我決定我不想重新發明輪子,所以我打算使用Chipmunk

幾天後,我終於有莫名其妙的碰撞檢測問題。我已經添加了邊界框繪圖功能,只是爲了看看到底發生了什麼。

enter image description here

正如你所看到的,貝爾蒙特與牆壁碰撞塊他沒有遠程接近感人。由於gosu gem附帶的演示遊戲運行正常,因此我一定在做錯了什麼,我可能不會真正瞭解多邊形Shape是如何定義並添加到空間中的。我很確定這不是我繪製的地方。

有一個公共回購的遊戲,所以你可以看到牆壁(Brush < Entity)和播放器(Player < Entity)的定義,他們確實有一個簡單的,長方形的多邊形。牆上沒有加入空間(他們是流氓),只有玩家是。我試過調試遊戲,看看body的位置是什麼,但都很好看。

https://github.com/ellmo/castellvania

球員慢慢倒下,但你可以控制他,上/左/右箭頭。 Tilde按鈕(~)顯示boudning框和碰撞盒應始終可見。

我需要一些幫助,試圖瞭解我做錯了什麼。

回答

0

我可能真的不udnerstand如何多邊形被定義並添加到空間。我很確定這不是我繪製的地方。

就是這樣。形狀座標被添加到身體位置,而不是從它減去。 在你Entity.boundaries更換線

verts << CP::Vec2.new(@shape.body.p.x - @shape[vert].x, @shape.body.p.y - @shape[vert].y) 

verts << CP::Vec2.new(@shape.body.p.x + @shape[vert].x, @shape.body.p.y + @shape[vert].y) 

,你會得到正確的圖像。 (繪圖仍然會斷開,但是邊界框將會正確。