使用TiledLayer的setCell方法映射地图数组出现奇怪错误
//这是要映射的地图矩阵
private static final int[][] map = {
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
};
//我在构造函数中去映射这个地图数组
public Sky() {
super(map[0].length,map.length, getImage(),
imgsrc.getWidth()/IMAGE_COLUMNS,
imgsrc.getHeight()/IMAGE_ROWS);
//问题就出在这里,我在双循环中是用setCell()方法总报
//
IndexOutOfBoundsException的错误。
for(int i=0;i <map.length;++i){
for(int j=0;j <4;++j){
//但是我使用这条语句检查它的赋值情况又是完全正确的
System.out.println( "setCell "+ "( "+i+ ", "+j+ ") "+ "= "+map[i][j]);
//this.setCell(i,j,map[i][j]);
}
}
}
//这是System.out.println语句打印的结果:
setCell(0,0)=0
setCell(0,1)=0
setCell(0,2)=0
setCell(0,3)=0
setCell(1,0)=0
setCell(1,1)=0
setCell(1,2)=0
setCell(1,3)=0
setCell(2,0)=0
setCell(2,1)=0
setCell(2,2)=0
setCell(2,3)=0
//但是一旦使用setCell就报以下的错误很奇怪:
setCell(0,0)=0
setCell(0,1)=0
setCell(0,2)=0
setCell(0,3)=0
java.lang.IndexOutOfBoundsException at javax.microedition.lcdui.game.TiledLayer.setCell(+31)
at ui.Sky. <init> (+107)
at ui.GameThread.init(+8)
at ui.GameThread. <init> (+27)
at ui.MenuCanvas.LoadGame(+35)
at ui.MenuCanvas.keyPressed(+101)
at javax.microedition.lcdui.Canvas.callKeyPressed(+19)
at javax.microedition.lcdui.Display$DisplayAccessor.keyEvent(+198)
at javax.microedition.lcdui.Display$DisplayManagerImpl.keyEvent(+11)
at com.sun.midp.lcdui.DefaultEventHandler.keyEvent(+127)
at com.sun.midp.lcdui.AutomatedEventHandler.keyEvent(+210)
at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.handleVmEvent(+122)
at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+51)
//望各位帮忙看看错误在那里啊?我查了一天还是没查出来
------解决方案--------------------数组越界问题,仔细检查就会发现错误!
this.setCell(i,j,map[i][j]); 错了
改为: this.setCell(j,i,map[i][j]);