Вот я знаю как описать монстров, какую логику им приставить...... Но я не понимаю как одновременно создать 20 объектов и при этом чтобы все они "действовали", не тормозя программу. Вот есть у меня класс Game. В нем есть такая ф-ция, где, по сути, всё и происходит: void Game::GameProcess() { while(!finished) { if(kbhit()) { CheckKey(); } RenderMap(); Sleep(33); } } Объясните дурню как правильно подключить в игру ботов. Их поведение запрограммировано. Я просто ну совсем не понимаю как их "включить" в игровой процесс... Вот допустим в конструкторе идет рандомный выбор стартовых координат. Там же они появляются на карте. А ещё у каждого объекта будет ф-ция LOGIC(). Как, не завися от имен объектов, создать 20 экземпляров? При этом же каждый шажок цикла логика у каждого вновь вызываться должна...
...как-то я всё по-китайски написал, но иначе выразиться не могу.. Надеюсь на вашу помощь!
class A : public Entity { virtual void Update() { // реализация поведения объекта класса A. std::cout << "Calling update A class." << std::endl; } };
class B : public Entity { virtual void Update() { // реализация поведения объекта класса B. std::cout << "Calling update B class." << std::endl; } };
int main() { std::vector<Entity*> entity_mgr;
// Создаем нужные объекты. A *a = new A(); B *b = new B();
// Помещаем их в объектный менеджер. entity_mgr.push_back(a); entity_mgr.push_back(b);
// Представим что это игровой цикл, начинаем перебирать объекты. for( auto &i:entity_mgr ) { i->Update(); // Вызываем Update для всех объектов. delete i; } }
Если тебя пугает необходимость обновлять состояние каждого из игровых объектов, то не пугайся: в подавляющем большинстве случаев процессорного времени с лихвой хватает, чтобы обновить хоть сотню объектов между двумя перерисовками экрана. Чтобы не обращаться к каждому отдельному объекту по имени, проще всего, как показал rozen777, занести их в контейнер. Как правильно задавать вопросы
rozen777, -l33t-h4xx-, а как создать сразу по 20 штук? Я в справочнике находил конструкцию Class A { }[...]; Интуитивно предполагаю что в [...] содержится количество возможных объектов... А вот как их создать? Вручную создавать не особо приятно.. Кроме того у меня есть объект "бонус", которых в конструкторе рандомно выбирает свое местоположение. Их должно быть 4 шт + при подборе бонуса создается новый экземпляр и удаляется старый
А как они должны создаться? По божественному наитию? То, что ты интуитивно предполагаешь, неверно: вместо квадратных скобок прописываются имена объектов, которые создаются сразу после объявления класса. Вручную, именно так, как тебе не хочется (почему-то).
ЦитатаSaitei ()
виртуальный метод..
Виртуальный метод - это метод, реализация которого возлагается на унаследованный класс. То есть пустышка, которую унаследованный класс обязан заполнить чем-то своим. Как правильно задавать вопросы
Сообщение отредактировал -l33t-h4xx- - Пятница, 10 Января 2014, 17:01
Saitei, я помню запускал один тест в которой было 30000 объектов, и все они двигались в сторону игрока, поворачивались на него и просчитывали столкновение с ним. Было жутко, но весело).Но несколько тысяч тянуло нормально. А 20 даже на самом слабом компе будет тянуть с лихвой. Поэтому просто делай вектор или массив своих объектов и в цикле вызывай у них функцию LOGIC. Создавать их тоже просто. В цикле
Можно, если количество объектов известно на момент компиляции и неизменно или выделять память про запас, но это налагает некоторые ограничения. В случае если количество объектов будет изменятся в ходе выполнения, то самая простая и лучшая реализация будет с использованием контейнеров таких как std::vector<>.
ЦитатаSaitei ()
как создать сразу по 20 штук?
Очень просто, посмотри на примеры выше. Создание и удаление объектов реализуешь ты сам, но в ходе программы это можно автоматизировать в ответ на какое-то действие. Если все же что-то не понимаешь, советую почитать книги, только там можно найти ответы и понять самому как все работает, а потом уже практика.