2017-12-15 7 views
0

ich benutze android studio für die entwicklung ein spiel das ist ein snake spiel, ich benutze Surfaceview. Mein Problem ist, dass ich einen Wert bekomme, der weniger als 1 von dem minimalen Wert ist, den ich einstelle.android java leinwand oberflächenansicht, das objekt erhält einen wert, wo es weniger oder mehr als der eingestellte minimum wert

Hier ist mein Code für die Update-Methode, wo die Validierung des Schlange-Objekts die Ecke trifft und das Objekt auf die gegenüberliegende Seite zeichnen sollte.

numlockswide = 30

numblockshigh = 16

minhigh = 2

maxhigh = numblocks hohe

public void updateSnake() { 


//every 100 ms or 1s the score increament 
     long elapse = (System.nanoTime() - startTime)/1000000; 
     if (elapse > speed) { 


//checks if hits the border so it could come from the opposite border 
      //north and south 

      if (snakeX[0] > numblocksWide) { 
       snakeX[0] = 0; 
      } else if (snakeX[0] < 0) { 
       snakeX[0] = numblocksWide; 
      } 

      //east west 

      if(snakeY[0] > maxHigh){ 
       snakeY[0] = minHigh; 
      }else if(snakeY[0] < minHigh){ 
       snakeY[0] = maxHigh; 
      } 


      for (int i = snakeLength; i > 0; i--) { 

//    System.out.println("snake[i] = " + i + " bx loc " + snakeX[i] + " by loc " + snakeY[i]); 
       snakeX[i] = snakeX[i - 1]; 

       snakeY[i] = snakeY[i - 1]; 
//    System.out.println("snake[i] = " + i + " nbx loc " + snakeX[i] + " nby loc " + snakeY[i]); 

      } 

      switch (currentDirection) { 
       case EAST: 

        snakeX[0]++; 
        angle = 0; 
        break; 
       case WEST: 
        snakeX[0]--; 
        angle = 180; 
        break; 
       case SOUTH: 
        snakeY[0]++; 
        angle = 90; 
        break; 
       case NORTH: 
        snakeY[0]--; 
        angle = 270; 
        break; 
      } 

      startTime = System.nanoTime(); 
     } 

    } 

Problem wird i alread eingestellt, dass der Minimalwert, wenn seine von links rechts Richtung ist 0, aber ich bekomme einen Wert von -1, weshalb ich das Apfelobjekt nicht essen kann, das in der Ecke/am Rand der Grenzen ist. Dies ist mein erstes Mal mit Oberflächenansicht und Leinwand, würde mir bitte jemand helfen mit diesem Fehler ...

Antwort

0

Sie fügen 0 in snakeX [0] = 0;

if (snakeX[0] > numblocksWide) { 
      ***snakeX[0] = 0;*** 
     } else if (snakeX[0] < 0) { 
      snakeX[0] = numblocksWide; 
     } 
... 

dann hier sank Sie -1

case WEST: 
       snakeX[0]--; 
       angle = 180; 
       break; 

das Problem Ihr Zustand bringen zu Ende Ihrer Funktion zu bewältigen:

if (snakeX[0] > numblocksWide) { 
      snakeX[0] = 0; 
     } else if (snakeX[0] < 0) { 
      snakeX[0] = numblocksWide; 
     } 

Es wird wahrscheinlich in Ordnung sein:

public void updateSnake() { 


    //every 100 ms or 1s the score increament 
    long elapse = (System.nanoTime() - startTime)/1000000; 
    if (elapse > speed) { 





     for (int i = snakeLength; i > 0; i--) { 

      //    System.out.println("snake[i] = " + i + " bx loc " + snakeX[i] + " by loc " + snakeY[i]); 
      snakeX[i] = snakeX[i - 1]; 

      snakeY[i] = snakeY[i - 1]; 
      //    System.out.println("snake[i] = " + i + " nbx loc " + snakeX[i] + " nby loc " + snakeY[i]); 

     } 

     switch (currentDirection) { 
      case EAST: 

       snakeX[0]++; 
       angle = 0; 
       break; 
      case WEST: 
       snakeX[0]--; 
       angle = 180; 
       break; 
      case SOUTH: 
       snakeY[0]++; 
       angle = 90; 
       break; 
      case NORTH: 
       snakeY[0]--; 
       angle = 270; 
       break; 
     } 

     //checks if hits the border so it could come from the opposite border 
     //north and south 

     if (snakeX[0] > numblocksWide) { 
      snakeX[0] = 0; 
     } else if (snakeX[0] < 0) { 
      snakeX[0] = numblocksWide; 
     } 

     //east west 

     if(snakeY[0] > maxHigh){ 
      snakeY[0] = minHigh; 
     }else if(snakeY[0] < minHigh){ 
      snakeY[0] = maxHigh; 
     } 

     startTime = System.nanoTime(); 
    } 

} 
+1

danke sir seine behoben, ich habe das nicht bemerkt Es war meine Funktion, die falsch platziert war, ich dachte immer, dass es etwas ist, was die Sicht und die Leinwand betrifft, ... –

Verwandte Themen