如何在Java中将元素移动到排序数组的底部?

时间:2019-07-07 22:16:37

标签: java arrays slick2d

首先,我很抱歉这是否属于gamedev,而不是在这里,其次,我仍然在学习Java,因此对不起,如果答案很简单,或者我没有以正确的方式解决问题。

我正在使用slick2d框架制作游戏,在这里人们的帮助下,我设法将所有角色放入一个数组,根据Y轴值对该数组进行排序,并按顺序绘制,以创建zaxis的幻觉。但是,现在,我想添加一个新的排序算法,以便在正常排序之后,出于游戏上的原因,它将任何无效字符推入数组的底部。

我已经制定了一种算法,看起来应该对我有用,但是实际上发生的是,当一个角色死亡时,它只是从屏幕上完全删除了一个随机字符,没有崩溃,没有空指针异常,只是一个字符停止渲染,尽管其余的游戏正常,但它们的动作和动作仍然像看不见一样。

我盯着这段代码已经很久了,以至于我似乎看不到它有什么问题,非常感谢您的帮助。

如果有必要,我可以发布原始的排序算法或绘制排序数组的代码,但我不认为存在问题,它们始终可以正常工作。

//this is what I have 

Creature temp = null;
for(int i=0; i<drawArray.length; i++) {
    if(drawArray[i].isDead){
        temp = drawArray[0];
        drawArray[0] = drawArray[i];
        int k = i
        for(int j=0; j < (i-1); j++){
            drawArray[k-1] = drawArray[k];
            k -=1;
        }
        drawArray[1] = temp;
    }
}

1 个答案:

答案 0 :(得分:0)

首先,您需要获取死者的索引:

int indexOfDeadGuy = -1;
for (int i=0; i<drawArray.length; i++) {
    if (drawArray[i].isDead) {
        indexOfDeadGuy = i;
        break;
    }
}

然后,您需要将每个人都移到该位置以下,以便可以将该人放在底部:

if (indexOfDeadGuy > -1) {
    Creature deadGuy = drawArray[indexOfDeadGuy];
    for (int i = indexOfDeadGuy; i > 0; i--) {
        drawArray[i] = drawArray[i - 1];
    }
    drawArray[0] = deadGuy;
}

编辑:如果您需要处理多个生物死亡的情况,则需要重新考虑该方法。一种方法是复制数组(在这种情况下,复制到List中),然后分两遍重新填充原始数组:

// first, copy the array (in this case into a list)
List<Creature> tempList = new ArrayList<>(Arrays.asList(drawArray));

// the index of the next position in the array to insert a creature
int targetIndex = 0;

// fill the array with dead things
for (Creature creature : tempList) {
    if (creature.isDead) {
        drawArray[targetIndex] = creature;
        targetIndex++;
    }
}

// continue filling the array with non-dead things
for (Creature creature : tempList) {
    if (!creature.isDead) {
        drawArray[targetIndex] = creature;
        targetIndex++;
    }
}

这将以列表的开头顺序堆叠所有死亡生物和之后的所有非死亡生物。