對我的代碼的結果有一個奇怪的問題。基本上我有一個精靈,我通過檢查每個像素的alpha值並將結果存儲在布爾值的2d向量中創建該精靈的「hitbox」,其中alpha 0 = false的像素和任何其他值= true 。這裏給出的測試用例是一個10x10像素的方塊,沒有透明像素。表示在這2D陣列座標,可以是1(真)或0(假)的結果在以下各值:在檢查2D矢量中的鄰居座標時返回的值不正確
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
這2D向量被稱爲「擊中格」。我的代碼旨在檢查hitBox中的每個座標以查看它是否返回「true」(除了代表精靈最外像素的座標外),如果返回true,則檢查每個座標的鄰居是否返回「真」也。如果所有鄰居都返回true,那麼「hitBox2」的相應座標值(作爲hitBox副本開始)從「true」更改爲「false」。用於該代碼的直接拷貝是如下:
vector<vector<bool> > hitBox2;
hitBox2 = hitBox;
for (int i = 1; i < sprite.getLocalBounds().height - 1; ++i) //i starts at 1 to avoid checking edge tiles, check is < height - 1 for same reason
{
for (int j = 1; j < sprite.getLocalBounds().width - 1; ++j)
{
if(hitBox[i][j])
{
if (hitBox[i - 1][j - i] &&
hitBox[i - 1][j] &&
hitBox[i - 1][j + 1] &&
hitBox[i][j - 1] &&
hitBox[i][j + 1] &&
hitBox[i + 1][j - 1] &&
hitBox[i + 1][j] &&
hitBox[i + 1][j + 1])
hitBox2[i][j] = false;
}
}
}
sprite.getLocalBounds()的高度和.WIDTH返回的高度和寬度在子畫面爲int的像素。據我可以告訴這將導致hitBox2結束瞭如下:
1111111111
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1111111111
但是相反hitBox2就是這樣來的,如下:
1111111111
1 1
1 1
11 1
111 1
1111 1
1 111 1
1 111 1
11 111 1
1111111111
我想不通爲什麼這個代碼不給我想要的結果。我假設我在某個地方犯了一個錯字或邏輯錯誤,但對於我的生活我找不到它!任何幫助將不勝感激。
如果用'10'代替'sprite.getLocalBounds()'部件會發生什麼? –