Редактировать: теперь отлично работает в отладчике, но блок не вращается вообще при нормальной работе.
У меня проблема с тем, что я пробежал тонну отладчика и сузил ее до этого.
У меня есть блок на экране, который спускается посередине и вращается. Изображение блока, очевидно, меняется, зависит от поворота, и это делается в операторе switch.
switch ( m_CurrentRotation ) {
case BossRotation_ZeroDegrees: {
ApplySurface(
m_BossRect.topLeftX,
m_BossRect.topLeftY,
BossFiveImage::p_ZeroDegrees,
p_Buffer
);
break;
}
case BossRotation_NinetyDegrees: {
ApplySurface(
m_BossRect.topLeftX,
m_BossRect.topLeftY,
BossFiveImage::p_NinetyDegrees,
p_Buffer
);
break;
}
case BossRotation_OneEightyDegrees: {
ApplySurface(
m_BossRect.topLeftX,
m_BossRect.topLeftY,
BossFiveImage::p_OneEightyDegrees,
p_Buffer
);
break;
}
case BossRotation_TwoSeventyDegrees: {
ApplySurface(
m_BossRect.topLeftX,
m_BossRect.topLeftY,
BossFiveImage::p_TwoSeventyDegrees,
p_Buffer
);
break;
}
default: {}
}
Блок входит в ноль градусов, и как только он попадает в середину, он начинает вращаться. Из отладки я обнаружил, что в операторе switch не вызывается ApplySurface для случая FIRST (когда я пытаюсь войти в него, ничего не происходит). Это приводит к тому, что блок становится пустым каждый раз, когда он достигает этой точки вращения.
Вот странные вещи ...
1) Если функция ApplySurface не вызывается, то почему вы видите, как сначала блок падает (до того, как он начинает вращаться)?
2) Запуск программы в отладчике и его запуск обычно показывают разные результаты. Обычно он просто показывает блок в его нулевой позиции все время. Отладчик - единственный раз, когда он фактически пытается повернуть блок. Происходят ли оптимизации компилятора, которые препятствуют тому, чтобы что-то происходило ужасно неправильно в моем операторе switch?