Ответ в теме: Контейнеры в классе

SFML и C++ Уроки \ Разработка игр Форумы SFML Graphics Контейнеры в классе Ответ в теме: Контейнеры в классе

#771
+1
Павел Букреев
Павел Букреев
Хранитель
Сообщений:586

Зарегистрирован:
04.01.2015

Репутация:104

вызываешь draw, который у тебя в классе не описан.

просто так рисовать через итератор у тебя не получится, ты должен рисовать спрайт объекта списка.

вспомни, мы ведь в int main не рисуем объект player, мы рисуем только его спрайт.

 

Я думаю сможешь нарисовать так, как написал draw(*it) только если закинешь в список одни лишь спрайты.

Чтобы нарисовать объект – тебе нужен спрайт.

Чтобы вызвать функцию (метод) (или обратиться к свойству) объекта нужно пройтись итератором по эл-там списка и вызвать её так: (*it)->функция();

Далее приведу отрывки переписки с Heisenberg’ом в вконтакте, чтобы другие тоже знали.

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

Список хранит в себе объекты, итератор пробегается от начала до конца. В каждом элементе списка есть адрес на следующий элемент (такая конструкция называется односвязный или однонаправленный список). Когда ты захочешь удалить элемент посередине списка – адресация от предыдущего элемента направится с предыдущего от удаленного, на следующий к удаленному. Например в списке лежат объекты 1->2->3 , удалишь 2 будет 1->3. Очень удобно удалять, например пули в игре. Если удаляешь с вектора, то нужно будет вынуть и назад запихнуть из него элементы. Поэтому тут список лучше.

 
и в списке нельзя обращаться по индексу к элементу, поэтому прём итератором.
и нам не надо писать кучу строк типа player1.update();
player2.update(); и тд
а просто закинуть в список плеер и вызывать it->update()