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();
}
}
我正在使用 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();
}
}