1

回転をx、y、zに変換できる「マウスリーダー」クラスがあります。(これは一種の一人称カメラです)しかし、私はその人が自分の軸を直接見たくないので、これを行いました:

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

私はチェックをしました、そしてそれは完璧です、それはあなたがあまり上下に行くのを防ぎます、しかし時々、それは91と269を下回ります、これはどうして可能ですか?

ありがとうございました

4

3 に答える 3

2

あなたは ド・モルゲンの法則に反した

言い換えると:

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

私はあなたが望んでいたのは:

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

またはさらに明確に:

if ((Altitude  +  MouseCoordChange[1] <= 269) && 
    (Altitude  +  MouseCoordChange[1] >= 91)))
{
于 2012-10-07T08:23:53.700 に答える
1

さて、デバッグのためだけに、この逆ロジックを試してください。

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

  //Do nothing here
}
else
{

  //Do stuff here

}
于 2012-10-07T09:14:08.643 に答える
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
}
于 2012-10-07T09:40:25.003 に答える