у меня есть класс ‘mouse reader’, который может превращать вращения в x, y, z. (Это своего рода камера от первого лица) Но я не хочу, чтобы человек смотрел прямо на свою ось, поэтому я сделал это:
if (!(Altitude + MouseCoordChange[1] > 269) && !(Altitude + MouseCoordChange[1] < 91))
{
Я проследил за проверкой, и она идеальна, она не позволяет вам слишком сильно подниматься и опускаться, но иногда это проходит под 91 и 269, как это возможно?
Благодарю вас
Вы упали Закон де Моргена
другими словами:
! && ! B =! (A || B)
Я подозреваю, что вы хотели:
if (!((Altitude + MouseCoordChange[1] > 269) ||
(Altitude + MouseCoordChange[1] < 91)))
{
Или даже яснее:
if ((Altitude + MouseCoordChange[1] <= 269) &&
(Altitude + MouseCoordChange[1] >= 91)))
{
Хорошо, только для отладки, попробуйте эту обратную логику.
if ( (Altitude + MouseCoordChange[1] < 91) && (Altitude + MouseCoordChange[1] > 269) )
{
//Do nothing here
}
else
{
//Do stuff here
}
Проверка диапазона происходит довольно часто, поэтому для этого будет полезен шаблон:
template< typename _T > bool inrange(_T first, _T last, _T value)
{
return ((value>=first) && (value<=last));
}
В твоем случае:
if (inrange(91, 269, (Altitude + MouseCoordChange[1]))
{
//is in the range - do something
}
else
{
//is outside the range - do something
}