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

How to move an element to the bottom of a sorted array in java?

首先,如果这属于 gamedev 而不是这里,我深表歉意,其次,我仍在学习 java 如果答案非常简单或者我没有按照正确的方式去做,我很抱歉。

我正在使用 slick2d 框架制作游戏,在此处人员的帮助下,我设法将我所有的角色放入一个数组中,根据 Y 轴值对该数组进行排序,然后将它们绘制到该命令,以创建 zaxis 的幻觉。不过,现在我想添加一个新的排序算法,以便在正常排序后,出于游戏玩法的原因,它将所有死字符推到数组的底部。

我做了一个看起来对我有用的算法,但实际发生的是,当一个角色死亡时,它只是从屏幕上完全删除一个随机字符,没有崩溃,没有空指针异常,一个角色只是停止渲染,尽管其余的游戏玩法运行良好,但他们的动作和动作仍然有效,就好像他们不是隐形的一样。

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

如有必要,我可以 post 我原来的排序算法或绘制排序数组的代码,但我不认为问题出在那里,它们一直运行良好。

//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;
    }
}

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

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;
}

编辑: 如果您需要处理多个生物死亡的情况,您需要重新考虑该方法。一种方法是复制数组(在本例中为列表),然后分两次重新填充原始数组:

// 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++;
    }
}

这会将所有死去的生物堆叠在列表的开头,然后所有 non-dead 生物以相同的相对顺序排列。