Некорректные значения возвращаются при проверке соседей, окружающих координаты в 2d векторе

0

Имеет странную проблему с результатами моего кода. В основном у меня есть спрайт, и я создаю "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

Я не могу понять, почему этот код не дает результат, который я намеревался. Я предполагаю, что где-то я сделал опечатку или логическую ошибку, но для жизни я не могу ее найти! Любая помощь будет принята с благодарностью.

  • 0
    Что произойдет, если вы замените части sprite.getLocalBounds() на 10 ?
Теги:
multidimensional-array

1 ответ

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, так что это не проблема.
  • 0
    @Mayerz @Proply В любом случае, он работает после того, как я изменил его с ji на j-1 как показано на ideone.com/kY2MMy
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню