我的代码结果有一个奇怪的问题。基本上我有一个精灵,我通过检查每个像素的alpha值并将结果存储在布尔值的2d向量中来创建此精灵的“hitbox”,其中alpha 0 = false的像素和任何其他值= true 。我在这里展示的测试用例是一个10x10像素的正方形,没有透明像素。将此2d数组中每个坐标的值表示为1(true)或0(false)会产生以下结果:
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
这个2d向量称为“hitBox”。我的代码用于检查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()。height和.width以精灵为单位返回精灵的高度和宽度(以像素为单位)。据我所知,这应该导致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 :(得分:2)
if (hitBox[i - 1][j - i] && /*...*/
第二个指标错了。它应该是j - 1
而不是j - i
。修复此地点后,请参阅http://ideone.com/kY2MMy了解结果。