Windows — C ++ просто, если операторы не проверяют?

у меня есть класс ‘mouse reader’, который может превращать вращения в x, y, z. (Это своего рода камера от первого лица) Но я не хочу, чтобы человек смотрел прямо на свою ось, поэтому я сделал это:

if (!(Altitude  +  MouseCoordChange[1] > 269) && !(Altitude  +  MouseCoordChange[1] < 91))
{

Я проследил за проверкой, и она идеальна, она не позволяет вам слишком сильно подниматься и опускаться, но иногда это проходит под 91 и 269, как это возможно?

Благодарю вас

1

Решение

Вы упали Закон де Моргена

другими словами:

! && ! B =! (A || B)

Я подозреваю, что вы хотели:

if (!((Altitude  +  MouseCoordChange[1] > 269) ||
(Altitude  +  MouseCoordChange[1] < 91)))
{

Или даже яснее:

if ((Altitude  +  MouseCoordChange[1] <= 269) &&
(Altitude  +  MouseCoordChange[1] >= 91)))
{
2

Другие решения

Хорошо, только для отладки, попробуйте эту обратную логику.

if (  (Altitude  +  MouseCoordChange[1] < 91) &&  (Altitude  +  MouseCoordChange[1] > 269)  )
{

//Do nothing here
}
else
{

//Do stuff here

}
1

Проверка диапазона происходит довольно часто, поэтому для этого будет полезен шаблон:

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
}
1
По вопросам рекламы [email protected]