如何将元素移动到 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 生物以相同的相对顺序排列。
首先,如果这属于 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 生物以相同的相对顺序排列。