基本上,我正在按照教程尝试制作基于图块的塔防游戏,到目前为止,我的代码如下:
private int[] findNextDir(tile s) {
int[] dir = new int[2];
tile u = grid.getTile(s.getXPlace(), s.getYPlace() - 1);
tile r = grid.getTile(s.getXPlace() + 1, s.getYPlace());
tile d = grid.getTile(s.getXPlace(), s.getYPlace() + 1);
tile l = grid.getTile(s.getXPlace() - 1, s.getYPlace());
在此点之后,第54行(d行)返回(没有代码段):
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11
at data.tileGrid.getTile(tileGrid.java:41)
public tile getTile(int xPlace, int yPlace) {
return map[xPlace][yPlace];
at data.enemy.findNextDir(enemy.java:54)
private int[] findNextDir(tile s) {
int[] dir = new int[2];
tile u = grid.getTile(s.getXPlace(), s.getYPlace() - 1);
tile r = grid.getTile(s.getXPlace() + 1, s.getYPlace());
tile d = grid.getTile(s.getXPlace(), s.getYPlace() + 1);
at data.enemy.<init>(enemy.java:37)
this.directions = new int[2];
//xDir
this.directions[0] = 0;
//yDir
this.directions[1] = 0;
directions = findNextDir(startTile);
at data.boot.<init>(boot.java:31)
enemy e = new enemy(texLoad("enemy"), grid.getTile(10, 10),
grid, 64, 64, 2);
at data.boot.main(boot.java:49)
public static void main(String[] args) {
new boot();
烦人的事情是,当我取出“ +1”时,除了缺少“ +1”之外,它的工作原理都是完美的。
答案 0 :(得分:1)
我花一点时间看看您正在使用什么。这是一个设置大小的数组,可以通过将其作为调试的简单输出来找到。
System.out.println(arrayname.length());
为什么这很重要?查看您的错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11
这说明您已经超出了设置的数组大小-初始化数组时,它的大小已设置;您可以在每个位置填充新元素或将其删除(留空),但总体尺寸保持不变。具体来说,在此错误中,您尝试将第11个元素放入大小为10的数组中。
这可能是由很多原因引起的,但是正如您已经部分发现的那样,我来看看
tile d = grid.getTile(s.getXPlace(), s.getYPlace() + 1);
当您在地图边缘时,会在这里发生什么? s.getYPlace()之后是否再没有其他元素了?由于您已经达到了地图的限制,并且数组的大小是固定的,因此您尝试为不存在的数组分配值-因此出现错误。
可能的解决方案?有几个,但是如果您想要一个非常有针对性的对象,为什么不将检查添加到网格中呢?加上+1实际上是将实体放置在您想要的位置,还是实际上有一个空格?
答案 1 :(得分:0)
好吧,我已经明白了,我试图将其抽象化,我想我的日食并不是那样。原始代码:
tile u = grid.getTile(s.getXPlace(), s.getYPlace() - 1);
tile r = grid.getTile(s.getXPlace() + 1, s.getYPlace());
tile d = grid.getTile(s.getXPlace(), s.getYPlace() + 1);
tile l = grid.getTile(s.getXPlace() - 1, s.getYPlace());
w /摘要
public int getXCoord() {
return (int) x / 64;
}
public int getYCoord() {
return (int) y / 64;
通常可以,但是不会。
tile u = grid.getTile((int) s.getX() / 64, (int) (s.getY() - 1) / 64);
tile r = grid.getTile((int) (s.getX() + 1) / 64, (int) s.getY() / 64);
tile d = grid.getTile((int) s.getX() / 64, (int) (s.getY() + 1) / 64);
tile l = grid.getTile((int) (s.getX() - 1) / 64, (int) s.getY() / 64);
如果没有使其抽象化并且在这里进行所有的划分都可以完美地工作,我没有丝毫的线索为什么会起作用,但是我不会纠结于此。
感谢所有发表评论或回答的人! <3