如何删除在C中循环中被调用的char图像?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何删除在C中循环中被调用的char图像?相关的知识,希望对你有一定的参考价值。

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

我尝试以与数组项目相同的方式删除所需的被调用函数迭代,但这只是给出了错误。

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是整数或类似的数组。如果你有先释放的记忆,你可以在free()之前放置适当的if召唤。

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

以上是关于如何删除在C中循环中被调用的char图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何在C中创建连续循环,其中循环的每次迭代在其内部循环的每次迭代中发生一次

在 C 循环中更改 char* 字符串

面试中被问Spring循环依赖的三种方式!!!

c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围

在 Activity 内部,如何暂停 for 循环以调用片段,然后在按钮单击片段后恢复循环以重新开始

在片段中重新加载android视图