SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Взаимодействие двух списков
В этой теме 3 ответа, 2 участника, последнее обновление spoty76 6 года/лет, 5 мес. назад.
-
АвторСообщения
-
Здравствуйте, у меня есть два списка, а точнее два итератора:
C++1234567std::list<Entity*> enemyArray;std::list<Entity*>::iterator iter1;std::vector<Object> e = lvl.GetObjects("zombie");for (int i = 0; i < e.size(); i++)enemyArray.push_back(new Enemy(zombieIm, lvl, lvl2, e[i].rect.left, e[i].rect.top, 300, 400, "zombie"));std::list<Fire*> fireArray;std::list<Fire*>::iterator fireIt;1 отвечает за врага, второй за создаваемый обьект огня, каким образом мне создать их взаимодействие, если я могу взаимодействовать с итератором только через массивы:
Этот для врага:
C++1for (iter1 = enemyArray.begin(); iter1 != enemyArray.end();)Этот для огня
C++1for (fireIt = fireArray.begin(); fireIt != fireArray.end();)Например я хочу сделать так чтобы если (*iter1) пересекался с (*fireIt), (*iter1) удалялся например
Как понимать соприкосновение указателей? Посколько оба итератора принадлежат разным спискам они никогда не будут равны друг другу (Т.е. они не смогут указывать на общий массив в куче). Если ты хочешь просто удлять объект из вектора если Зомби задевает огонь то проверяй пересечение обоих через вложеный цикл
C++12345678for (auto it1 = enemyArray.begin(); it1 != enemyArray.end(); it++ ){for (auto itF = fireArray.begin(); itF != fireArray.end(); itF++){if (it1->Sprite.getGlobalBounds().intersects(itF->Sprite.getGlobalBounds()))fireArray.erase(itF);}}Выйдет примерно такая конструкция. IDE с плюсами под рукой сейчас нет что бы проверить названия методов.
А, и да, не пугайся конструкции auto it1 = enemyArray.begin(); Тип auto зарезервирован языком как автоматически определяемый тип на момент сборки объекта, следственно компьютер сам поймёт что от него тут требуют если полю сразу было передано значение. Единственный недостаток auto (var в C# и вроде Java) в том что он ухудшает читаемость кода человеком, но в циклах вполне себе используем.Но тогда если один массив пустой, то второй не будет работать, я проверил, если на карте нету врагов (пустой массив), то огонь не будет обновляться, визуально его просто нету. Этому есть какое-то решение или придется костыли делать?
А, я идиот забей, я понял
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.