因此,我的应用程序让用户在网格上放置块,如果用户用相同的套装或颜色排队3个或更多的块,则会发生某些事情。当玩家放置块I调用这个方法:我该如何阻止“IndexOutOfBoundsException”问题?
blocks_.add(new Block(new Vector2(rect_mouse.x, rect_mouse.y), blocks_.get(0).blockID, blockCount));
当你把3个或更多在一起,我调用这些方法:
blocks_.removeValue(blocks_.get(left_bravo_indexNum), true);
blocks_.removeValue(blocks_.get(center_charlie_indexNum), true);
blocks_.removeValue(blocks_.get(right_alpha_indexNum), true);
stack:
Exception in thread "LWJGL Application" java.lang.IndexOutOfBoundsException: 13
at com.badlogic.gdx.utils.Array.get(Array.java:125)
at com.jrp.mygearapp.GameScreen.touchUp(GameScreen.java:1443)
at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:297)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:186)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:110)
这是为了去除块,但它导致了这种IndexOutOfBoundsException异常。有没有办法来防止这个错误?
这可能是因为数组自动排序元素的数量并将数量降低到数组中正确数目的元素,并且我仍然有标记为高于数组大小的元素。我仍然是新手,所以我的分析可能不正确。请提醒我,如果是这种情况,并帮助我找到解决办法。 谢谢。
edirted *润色()函数-------
@Override
public boolean touchUp(int x, int y, int pointer, int button) {
if (button == 0) {
display_blockCheck = false;
////set blockCount to the size of blockArray so blocks can properly be indexed
blockCount = blocks_.size;
if (!overlap) {
Gdx.app.log("Block Added", "x: " + x + " y: " + y);
updateQueueBlocks();
//add block
Vector2 rect_vector = new Vector2(rect_mouse.x, rect_mouse.y);
Block block = new Block(rect_vector,blocks_.get(0).blockID, blocks_.size);
blocks_.add(block);
if (center_charlie_suit == "Square") {
center_charlie_bool = true;
if (right_bravo_suit == "Square") {
right_bravo_bool = true;
if (right_alpha_suit == "Square") {
Gdx.app.log("3-pair", "Square:345:lr");
right_alpha_bool = true;
//call 3-pair event
blocks_.removeValue(blocks_.get(center_charlie_indexNum), true);
blocks_.removeValue(blocks_.get(right_alpha_indexNum), true);
blocks_.removeValue(blocks_.get(right_bravo_indexNum), true);
}
}
}
剩下的只是很长,只是检查其他块彼此相邻..
首先尝试添加堆栈跟踪,第二个最有可能的错误将在那长长的一行,如何分裂的东西一点点,但所以你可以得到一个更好的stacktrace?创建一个实例并将其作为参数传递。这个错误意味着你正在为数组/列表等调用一个无效的索引。我打赌在这里:'新的Vector2(rect_mouse.x,rect_mouse.y)',但我不知道什么是Vector2。 – porfiriopartida
您可以将堆栈跟踪添加到问题中。 – porfiriopartida
因为无知,你分裂的东西是什么意思? Vector2是块的线,新块是类块的实例,块ID是块的类型,块计数是数组内块的索引号 – GfxandCode