我目前正在實施一個允許玩家在賽道上駕駛汽車的java小遊戲。碰撞檢測顏色
我希望汽車如果偏離軌道慢,但是,因爲軌道是圓形的,所以使用矩形似乎不是最好的想法。
一個突然出現在我頭上的想法是用某種方式使用汽車像素的顏色。如果汽車的所有像素碰巧都是地圖上的綠色,而不是黑色的,那麼我會放慢車速。
這是一個很好的方法嗎?如果是這樣,我該如何去做呢?搜索剛剛獲得了相同的矩形交集方法來進行碰撞檢測。
我目前正在實施一個允許玩家在賽道上駕駛汽車的java小遊戲。碰撞檢測顏色
我希望汽車如果偏離軌道慢,但是,因爲軌道是圓形的,所以使用矩形似乎不是最好的想法。
一個突然出現在我頭上的想法是用某種方式使用汽車像素的顏色。如果汽車的所有像素碰巧都是地圖上的綠色,而不是黑色的,那麼我會放慢車速。
這是一個很好的方法嗎?如果是這樣,我該如何去做呢?搜索剛剛獲得了相同的矩形交集方法來進行碰撞檢測。
你可以做碰撞檢測類似比特。用1代表前景,用0代表透明或外部像素。 '將面罩與汽車所在的背景相結合,會導致汽車所在的背景像素。當然,這個'AND'操作不是對位進行操作,而是對背景的像素值進行操作。搜索Raster-Ops或PixBlt可能會導致一些解決方案。
您是否可以點亮一下contains()方法的實現? – 2011-05-13 11:56:13
@Dhaivat Pandya:這是最好的部分 - 所有的實現類已經有了具體的方法。這裏有一個[示例](https://sites.google.com/site/drjohnbmatthews/point-in-polygon),使用「Polygon」。 – trashgod 2011-05-13 19:46:42
+1這似乎是唯一的理智和不慢的答案。 – 2011-05-13 20:46:51
這些都是很好的答案。如果您想更深入地瞭解顏色檢測的想法,請查看Java API中的Robot類;它有很多很酷的低級功能,比如獲取屏幕上一個點的顏色值(px,px),移動光標而不依賴於用戶等等。
這是一個[使用'createScreenCapture()']的示例(http://stackoverflow.com/questions/3742731/java-how-to-draw-constantly-changing-graphics/3742841#3742841)。 – trashgod 2011-05-13 02:31:21
這不是一個好主意。這就像試圖通過製作機器人手臂將程序寫入文件一樣。你可以在後端做。 – 2011-05-13 20:46:34
你自己的後端?你將如何在Java中做到這一點?我沒有看到類比;低級訪問是低級訪問。但我並不是說這個算法是一個好主意。 – xdevient 2011-05-13 21:34:34
我喜歡trashgod的答案最好,但是,如果你不使用Shape類,那麼你可能會遇到問題。
所以,這是我的答案。首先,任何你可以在屏幕上繪製的東西都有一定的粒度,所以要充分利用它。你還沒有提供很多關於如何在屏幕上傳輸的細節,但是,這是我的建議。
使用Bezier Curves。由於它們是數學上定義的(並且繪圖非常簡單),因此您可以輕鬆地在Bezier曲線上選擇100個點,並檢查您的汽車邊緣是否在Bezier曲線內。這可能是最準確的解決方案。
如果你不喜歡數學出於某種原因,我會建議跟蹤一個變量,它包含最近一塊污垢的距離,當這個變量爲零時,可以減慢車速。或者(最糟糕的解決方案),您可以比較屏幕上顯示的兩個補丁(汽車和污垢),並檢查汽車是否在污垢上。這是Shape.contains()方法所做的,但是,它是由專業人員編寫的,而且您的版本可能會明顯變慢。
如何定義圓形軌道?如果你還沒有,你可能還想看看http://gamedev.stackexchange.com/。 – YXD 2011-05-13 00:58:06