Как удалить символьное изображение, вызываемое как функция в цикле в C? - PullRequest
0 голосов
/ 29 апреля 2019

Я создаю игру.У меня есть функция, которая рисует изображение персонажа в случайных местах, используя цикл.У меня есть логика столкновения, которая все прекрасно работает.У меня проблема в том, что я не знаю, как заставить изображение персонажа удалить из игры при столкновении.Изображение является одним из множества подобных на игровом дисплее, поэтому я специально хочу иметь возможность удалять изображение персонажа в определенном месте и уменьшать общее количество сохраненных номеров, если изображения этого типа в игре возвращаютсяэто на табло.

Я пытался удалить желаемую итерацию вызываемой функции так же, как если бы это был элемент массива, но это просто выдавало ошибки.

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

1 Ответ

0 голосов
/ 29 апреля 2019

Из этого кода я могу только предполагать, что вы хотите удалить изображение вражеского персонажа. Хорошо, тогда. Обычно мы делаем что-то вроде этого:

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]));
}

Теперь враг в середине массива исчез. Я предполагаю, x и y являются массивами целых чисел или что-то в этом роде. Если у вас есть память для освобождения в первую очередь, вы должны сделать соответствующий вызов free() перед if.

Пожалуйста, используйте лучшие имена переменных для глобалов. enemyx и enemyy будут уже огромным улучшением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...