2017-12-15 2 views
0

뱀 게임 인 게임 개발을 위해 Android Studio를 사용하고 있습니다. Surfaceview를 사용하고 있습니다. 내 문제는 내가 최소 값에서 1보다 작은 값을 얻는 것입니다.android java canvas surfaceview, 개체가 값이 최소 또는 최소 값보다 작아집니다.

여기에 뱀 개체의 유효성 검사가 구석을 치고 반대편에 개체를 그려야하는 업데이트 메서드에 대한 내 코드입니다.

numlockswide = 30

numblockshigh = 16

minhigh = 높은

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(); 
     } 

    } 

문제 나 설정을 벌써되는 2

maxhigh = numblocks 최소치의 좌우에서 만약 방향은 0이지만 나는 -1의 값을 얻고있다. 그래서 나는 테두리의 모서리/가장자리에있는 사과 개체를 먹을 수 없다. 이것은 처음으로 표면 뷰와 캔버스를 사용하는 사람이 누구든이 버그를 도와주세요.

답변

0

snakeX [0] = 0; 그것은 아마 괜찮을 것

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

:

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

는 여기에 당신은 문제가 함수의 마지막에 당신의 상태를 가지고 해결하기 -1

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

감소

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

고마워요, 고맙습니다. 그것이 잘못 배치 된 것은 내 기능이었는데, 나는 항상 그것이보기와 캔버스를 포함하는 것이라고 생각했다. –