如何删除在 C 中循环中作为函数调用的字符图像



>我正在创建一个游戏。我有一个函数,它使用循环在随机位置绘制角色图像。我有碰撞逻辑,一切都很好。我遇到的问题是我不知道如何在碰撞时从游戏中删除角色图像。该图像是游戏显示中的许多同类图像之一,因此我特别希望能够删除特定位置的角色图像,如果游戏中该类型的图像,则减少存储的总存储数量,以将其返回到记分牌上。

我尝试删除被调用函数的所需迭代,就像删除数组项目一样,但这只是给出错误。

void drawEnemy(){
   drawEnemyImage(x[i], y[i], enemyImage);
}
void drawAllEnemies(){
   for(int i = 0; i < numEnemies; i++){
   drawEnemy(i);
   }
}
// (i also have collision logic here but it's not needed for the problem)
void returnCollision(){
    for (int i = 0; i < numEnemies; i++){
        if(collision() == true)
            return;
}

从这段代码中,我只能假设您要删除敌人角色图像。那好吧。我们通常会做这样的事情:

void deleteEnemy(int i) {
    --numEnemies;
    if (i == numEnemies) return;
    memmove(x + i, x + i + 1, (numEnemies - i) * sizeof(x[0]));
    memmove(y + i, y + i + 1, (numEnemies - i) * sizeof(y[0]));
}

现在阵列中间的敌人不见了。我假设xy是整数数组或类似的东西。如果您有要先释放的内存,则应在if之前放置适当的free()调用。

请为全局变量使用更好的变量名称。 enemyxenemyy已经是巨大的进步了。

最新更新