首先,我很抱歉这是否属于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;
}
}
答案 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++;
}
}
这将以列表的开头顺序堆叠所有死亡生物和之后的所有非死亡生物。