android java canvas surfaceview ,对象正在获取小于或大于设置的最小值的值

android java canvas surfaceview , the object is getting a value where it less or more than the set minimum value

我正在使用 android studio 开发一款贪吃蛇游戏,我正在使用 Surfaceview。我的问题是我从我设置的最小值中得到的值小于 1。

这是我的更新方法代码,其中蛇对象的验证到达角落并且应该将对象绘制到另一侧。

numlockswide = 30

numblockshigh = 16

最小高 = 2

maxhigh = numblocks 高

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

    }

问题是我已经设置了从左到右方向为 0 的最小值,但我得到的值为 -1,这就是为什么我不能吃 corner/edge 中的苹果对象边界。这是我第一次使用 surfaceview 和 canvas ,有人可以帮我解决这个错误吗...

你在snakeX中插入0[0] = 0;

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

然后这里你减少到-1

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

要解决问题,请将您的条件带到函数的末尾:

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

应该没问题:

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

}