2009-09-30 32 views
0

我認爲標題相當自我解釋,但只是爲了澄清我想弄清楚如何判斷碰撞發生在哪一側。C#:我怎麼知道碰撞發生在哪一邊?

想了解更多細節,我試圖做一個迷宮般的遊戲,所以我不能簡單地停止碰撞時的所有移動。相反,我需要能夠分辨碰撞發生在哪一邊,所以我可以阻止這個方向。

任何幫助表示讚賞,如果有更好的方法來解決這個問題,我都會嘗試。

我希望這是足夠的細節,但如果你需要了,問,我會編輯。提前致謝。

@viggity - 不,我沒有使用任何特定的遊戲引擎,我會發布當前的「檢測」代碼,但它有點,荒謬,健壯。

@Streklin - 我使用this.Paint事件來繪製到窗體本身,因爲它建議我開始這樣做,以更好地實時繪製。我還使用了每當計時器基於我按(左,右,上,下)滴答時更新的位置。是的,迷宮是基於瓷磚的。目前它只包含3種顏色。我不是一個非常高級的程序員。

@Eric - 絕對是一場一場比賽。同樣,我只有3種顏色,線條是黑色的,背景是白色的,方形(用戶)是綠色的。我將DrawImage()與Bitmaps一起用於繪製屏幕。

[編輯僞碼總結]

的foreach(牆上_wall在壁) 如果(player.intersectsWith(_wall)) 停止運動;

@JeffH - 我不太清楚你在問什麼,因爲除了測試我正在使用的代碼來嘗試使它工作以外,幾乎所有的東西都存在。我唯一遺漏的是if語句來檢查它是否是x軸,以便x和y可以獨立移動。因此,不要因爲碰到牆壁而「卡住」,而是可能滑向牆壁。雖然之前發生問題,但我沒有看到包括這一點在內。

+0

您是否使用特定的遊戲引擎?這是更多的API特定問題,而不是C#問題。你有任何可以與我們分享的代碼嗎? – viggity

+0

我認爲了解你如何代表迷宮以及你如何處理運動會有所幫助。你只是使用物理引擎或某種排序將每幀的偏移量添加到位置,是基於迷宮圖塊的嗎? – Streklin

+0

你最初是在做碰撞檢測嗎?這是一維,二維還是三維物體碰撞檢測? –

回答

4

假設你在這裏討論3D遊戲。

您可以看到臉部的法線指向您,因此您的方向矢量與臉部法線的點積將爲負值。如果它是積極的,那麼你是從後面進來的。

如果它爲零,那麼您將以正確的角度移動到臉部。

|    <---------- your direction of travel 
| 
|----------> <- face normal 
| 
| <- face 

如果您在3D是沒有,那麼你可以存儲在牆上面臨(作爲2D矢量)的方向,做同樣的點積與運動的二維方向。

0

根據你的編輯,你一次只能朝一個方向走?或者你可以走對角線方向嗎?如果是後者,ChrisF已經爲您提供了3D的答案以及2D的相應信息。如果沒有,你只需要停止旅行的方向 - 因爲只有四種可能性,它應該很容易檢查他們所有的簡單的入門遊戲。

相關問題