2014-02-27 53 views
0

對我的代碼的結果有一個奇怪的問題。基本上我有一個精靈,我通過檢查每個像素的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 

我想不通爲什麼這個代碼不給我想要的結果。我假設我在某個地方犯了一個錯字或邏輯錯誤,但對於我的生活我找不到它!任何幫助將不勝感激。

+0

如果用'10'代替'sprite.getLocalBounds()'部件會發生什麼? –

回答

2
 if (hitBox[i - 1][j - i] && /*...*/ 

第二個索引是錯誤的。它應該是j - 1而不是j - i。修復這個地方後的結果見http://ideone.com/kY2MMy

+0

Dayum。從10分鐘開始檢查這段代碼,我怎麼會錯過這個...但是'hitBox [i - 1] [j - i]'總是會返回true,因爲它會給出0,所以這不是問題。 – 2014-02-27 06:37:04

+0

@Mayerz @Proply無論如何,它在我從「ji」更改爲「j-1」後有效,如http://ideone.com/kY2MMy – timrau

+0

好吧,但是等一下,'hitBox [i - 1] [j - 我]'永遠是對的? – 2014-02-27 06:45:48