我正在嘗試製作一個小遊戲,僅僅爲了它的樂趣,我碰到了一些碰撞問題。我的播放器和2D陣列中的一個塊之間的碰撞檢測
我在畫布上繪製了一個玩家,在另一個畫布上繪製了一些塊(16 x 16px)。
但我在檢測水平碰撞時遇到了問題。
...
我的問題歸結爲:
我的播放器使用X,Y座標存儲爲:
var p_x; var p_y;
這些值是玩家在像素左下角座標。
但我的塊是在一個稱爲二維數組:
var g_levelarray;
並且每個塊爲16×16像素,從而,例如,如果我做的:
g_levelarray[3][2] = 1;
意味着一個塊將被繪製在畫布左:48像素和帆布底部32PX
...
但後來我有我的代碼檢查塊(根據玩家),其中x和y是playercoordinates
function blockexists(x, y) {
var xpos = parseInt(x/g_blocksize);
var ypos = parseInt(y/g_blocksize);
$("#checkedblock").html("checked block: " + xpos + " " + ypos);
if (g_levelarray[xpos][ypos] != undefined) {
return true;
}
else {
return false;
}
}
但查了一些錯誤,由於它四捨五入了號碼,當我打了塊從半年下來頂部的事實存在(如如下圖所示),它允許玩家進入區塊。
the error i have http://userhome.org/test/error.png
我也曾嘗試Math.round代替parseInt函數但這隻會在玩家中的一個問題。
那麼,如何以正確的方式編寫此代碼,以便我的玩家不會進入該塊?
THX提前
如果'g_levelarray [xpos] [ypos]'代表一個字符串,然後 在您的代碼中'indexOf()'方法內部發生了什麼? – 2013-05-04 20:40:16
我想我起初誤解了你,但是我明白你的觀點。代碼索引是錯誤的。它應該是indexOf('t')== -1。大聲笑。但仍然沒有問題,但:)但我現在剛剛刪除。 – JohnMalkowich 2013-05-04 21:00:41
'return g_levelarray [xpos] [ypos]!= undefined'會更乾淨。 – Shikiryu 2013-05-04 21:19:21