скажем, у меня есть вектор, состоящий из указателей класса Enemy:вектор, состоящий из указателей класса
vector<Enemy*> enemyVect;
Этот вектор затем заполняется с указателями Enemy:
for (int i = 0; i < numbOfEnemys; i++) { //add all enemies to vector with random EnemeyType
int random = rand() % enemyTypesVect.size();
Enemy* e1 = enemyTypesVect[random];
enemyVect.push_back(e1);
}
После этого все Врагам присваивается случайная координата XY:
for (int i1 = 0; i1 < enemyVect.size(); i1++) { //spread enemys out on X-axis
int randomx = rand() % 720;
newRect = enemyVect[i1]->getRect();
newRect.x = randomx;
enemyVect[i1]->setRect(newRect);
}
for (int i2 = 0; i2 < enemyVect.size(); i2++) { //spread enemys out on Y-axis
int random = rand() % 1000;
newRect = enemyVect[i2]->getRect();
//newRect.y = random;
newRect.y = random - 1000;
enemyVect[i2]->setRect(newRect);
}
На этом этапе все враги имеют свой уникальный p osition. В то время как программа работает, я пробегаем по этому вектору, и я стараюсь, чтобы заставить их двигаться в Y-ось:
for (int i = 0; i < enemyVect.size(); i++) {
newRect = enemyVect[i]->getRect();
newRect.y += enemyVect[i]->getSpeed();
enemyVect[i]->setRect(newRect);
enemyVect[i]->draw();
}
Здесь возникает проблема, так как все Враги получает значение в том же положение , Таким образом, это происходит, как будто есть только один Враг, но на самом деле их 30, просто уложенных поверх каждого другого. Я не слишком хорошо знаком с C++, но я предполагаю, что это связано со всеми указателями, которые смотрят на ту же самую копию, которая установлена? Стоит отметить, что врагTypesVect состоит только из 1 типа врага на данный момент, если я добавлю еще один, то рисуются 2 врага. Что мне делать, чтобы исправить это?
Спасибо заранее и дайте мне знать, если я должен включать в себя больше коды :)
Функции черчения():
void Enemy::draw() {
SDL_RenderCopy(sys.getRen(), getTexture(), NULL, &getRect());
}
Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –
Подумайте, сколько объектов вы создали для каждого типа врага. – Mat
Вероятно, это не связано с вашей проблемой, но вам лучше использовать 'std :: vector> enemyVect;' или 'std :: vector >' вместо необработанных указателей. –