gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:21:05 24 4
gpt4 key购买 nike

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

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

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

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

如果有必要,我可以发布我原来的排序算法或绘制排序数组的代码,但我不认为错误在那里,它们总是工作得很好。

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

这会将所有死亡的生物堆叠在列表的开头,然后将所有未死亡的生物按照相同的相对顺序堆叠起来。

关于java - java中如何将一个元素移动到已排序数组的底部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56926516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com