2016-03-25 9 views
-2

た後、私はこのコードに代わり%のFMOD機能を使用する必要があります。%は動作しませんランド()C++

int prob = rand();// % 4; 
    prob = fmod(prob,4); 
    if (prob == 0) { 
     shoot = true; 
    } 
    else shoot = false; 

私は%、PROB変数を使用する場合、それはデバッガでは任意の値を取得しません。

2番目の問題は、if、else、else、およびshoot = trueにブレークポイントを置くと決して内側に来ないということです。 デバッガは言う:ブレークポイントは現在ヒットしません。デバッガのターゲットコードタイプの実行可能コードは関連付けられていません。

他のコンピュータでは、2番目の問題は存在しません。

のフル機能:

void cVoladorEstatico::Logic(int *map) 
{ 

    double t1 = glutGet(GLUT_ELAPSED_TIME); 
    if (t1 - moveDelaySteering > 20 * 20) { 
     random_variable = rand(); 
     moveDelaySteering = t1; 
    } 
    if (t1 - moveDelay > 20) { 
     int aux = y; 

     y += random_variable%speed - 3; 

     //Whats next tile? 
     if ((y % TILE_SIZE) <= 1) 
     { 

      /*y += speedY; 
      x += speedX;*/ 
      //si choca con tile, se autodestruye muy fuerte 
      if (CollidesMapWall(map, false)) y = aux; //delete this; 
     } 
     //Advance, no problem 
     else 
     { 
      /*y += speedY; 
      x += speedX;*/ 
      //TODO: si choca, hace magia 
     } 
     moveDelay = t1; 
    } 
    //should i shoot 
    //if (t1 - lastShootDec > shootChance) { 
    int prob = rand();// % 4; 
    prob = fmod(prob,4); 
    if (prob == 0) { 
     shoot = true; 
    } 
    else shoot = false; 
    //} 
} 
+0

コードを再コンパイルしましたか? –

+1

なぜ 'fmod'を' int'に使うのですか? – Logicrat

+0

'%'や 'fmod'を使わずに'(value&3) 'を使うべきです。いくつかのコンパイラは、最適化レベルに応じて、 '%4'よりも効率的に'&3'をコード化することができます。 –

答えて

1

元のコードがうまく動作するはずです。デバッガがあなたに真実を伝えていない可能性があります。値がprobに格納されるのをスキップします。ifの条件ではしか使用されません。したがって、計算した後に値を書き出してください。prob何が起こっているのかを見てください。