Имеет странную проблему с результатами моего кода. В основном у меня есть спрайт, и я создаю "hitbox" этого спрайта, проверяя альфа-значение каждого пикселя и сохраняя результат в 2d-векторе логических значений, где пиксель альфа 0 = false и любое другое value = true, Мой тестовый пример представлен 10 × 10-пиксельным квадратом без прозрачных пикселей. Представление значения каждой координаты в этом 2d-массиве как либо 1 (true), либо 0 (false) приводит к следующему:
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
Этот 2d-вектор называется "hitBox". Мой код предназначен для проверки каждой координаты в hitBox, чтобы узнать, вернет ли она "истина" (за исключением координат, представляющих самые внешние пиксели спрайта), и если возвращает 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 возвращают высоту и ширину в пикселях спрайта как 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
Я не могу понять, почему этот код не дает результат, который я намеревался. Я предполагаю, что где-то я сделал опечатку или логическую ошибку, но для жизни я не могу ее найти! Любая помощь будет принята с благодарностью.
if (hitBox[i - 1][j - i] && /*...*/
Второй индекс неверен. Он должен быть j - 1
вместо j - i
. См. Http://ideone.com/kY2MMy для результата после исправления этого места.
hitBox[i - 1][j - i]
всегда будет возвращать true, поскольку он даст 0, так что это не проблема.
ji
на j-1
как показано на ideone.com/kY2MMy
sprite.getLocalBounds()
на10
?