WXZRW, но оба эти варианта менее удобны, простым наследованием можно легко обойтись без этих костылей... Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
но оба эти варианта менее удобны, простым наследованием можно легко обойтись без этих костылей...
Да можно, я же не говорю что надо делать именно так как я сказал, я только ээээ... упомянул эти факты как то что они есть, к тому же не факт что стоит пихать ООП всегда и везде, тем более класс сравнительно небольшой.... Вобщем это решать автору как ему делать... Мой пост был для информационных целей... Чтобы человек знал о том что есть и другие пути... в случае если он не знал об этих именно путях или забыл о них...
Сообщение отредактировал WXZRW - Пятница, 27 Августа 2010, 16:44
Спасибо огромное всем! Пока все получается и работает Если будут еще какие вопросы, а я думаю они будут напишу в эту же тему.
Добавлено (28.08.2010, 07:54) --------------------------------------------- А вот и вопрос) Как удалить переменную из вектора? Ведь erase работает только с итераторами. Это что, переделывать цикл под итераторы? Вот код переделанной программы от bum'a:
Предлагаю реализовать аккумулятор.Объясню, что это такое,если кто не знает.Вообщем,чтобы не затормаживать компьютер и не засорять зря память надо во время загрузки создать и загрузить в аккумулятор n-кол-во пуль.После этого реализовать их невидимость до использования,либо поместить их за игровое пространство.А при необходимости стрельбы перемещать и использовать их в нужном месте.После расхода пуль, их обратно помещают на первоначальное место. Это мое объяснение. А движение пули я предлагаю реализовать при помощи матрицы перемещения. По теме аккумулятора предлагаю почитать книгу "как стать создателем компьютерных игр" Касихина. Там в дополнительных матералах описан этот метод на дельфи.
Если пули видны (хмм 2Д игра что ли...) и у них есть геометрическое представление... можно создать одну пулю в виде геометрии заранее, все остальные создавать динамически в виде позиции (для 2д это два скаляра) и ориентации (для 2д это 4 скаляра), потом при рендере рисовать пулю с геометрией но трансформировать ее матрицей и выставить позицию... Если пуля вышла за пределы экрана, тогда ее удалять... при стрельбе создавать новые... Тогда одни будут удаляться, другие создаваться.. динамически. Пуля с геометрией остается всегда и выступает как прокси для рендера и т.д.
Сообщение отредактировал WXZRW - Суббота, 28 Августа 2010, 14:01
WXZRW, спасибо, проглядел что .begin() итератор возвращает. Ну тогда, на сколько я понимаю, код должен выглядеть так:
Code
for(int i = 0; i < ObjectsList.size();) { if (ObjectsList[i]->kill==1) { ObjectsList.erase(ObjectsList.begin()+i); } else i++; }
Тогда подскажите как очистить память с такого вызова посредством delete:
Code
ObjectsList.push_back(new CPlayer());
Добавлено (29.08.2010, 02:03) --------------------------------------------- Вот, я сделал так, скажите правильно или нет?
Code
CObject* pObject; for(int i = 0; i < ObList.size();) { ObList[i]->Process(); if (ObList[i]->kill==1) { pObject = ObList[i]; ObList.erase(ObList.begin()+i); delete pObject; } else i++; }
Добавлено (02.09.2010, 01:39) --------------------------------------------- Назрел такой вопрос, помогите пожалуйста! Есть функция которая возвращает столкновения объектов, к примеру такая: bool Col_AABB( PAABB2D A, PAABB2D B ); Каким образом реализовать механизм опроса столкновений? Это что для каждой пули, каждый кадр обрабатывать столкновения со всеми возможными объектами? Или есть какой то более хитрый способ выбрать объекты с которыми она может столкнуться(по ближайшим координатам и типу объектов например), разъясните пожалуйста, буду очень благодарен!!!!
Назрел такой вопрос, помогите пожалуйста! Есть функция которая возвращает столкновения объектов, к примеру такая: bool Col_AABB( PAABB2D A, PAABB2D B ); Каким образом реализовать механизм опроса столкновений? Это что для каждой пули, каждый кадр обрабатывать столкновения со всеми возможными объектами?
А чем плохо после отработки перемещения пули сразу же проверять не попала ли она куда либо?
Тоесть, перебором каких либо обьектов или как там?
Нужно проверить столкновения пули со всеми обьектами, с которыми она должна сталкиваться. Да, здесь нужен перебор. Можно как-то оптимизировать чтобы отбросить лишние обьекты на раннем этапе.
Если пуля имеет обьем, то есть это не точка, а например круг или прямоугольник, можно сделать swept test, особенно если пуля летит по прямой. Если пуля в виде точки, а ее траектория сводится к отрезку (line segment), тогда тест упрощается до проверки коллизии линии с каким либо обьемом (круг, прямоугольник и т.д.).
Swept test прямоугольной (или круглой, вобщем обьемной) пули, имеющей линейную траекторию (лайн сегмент) сводится к формированию прямоугольника в виде движения самой прямоугольной пули от начала лайна до конца лайна. То есть выставив два прямоугольника в начале и конце лайна, также получается новый прямоугольник, внутри которого пуля могла бы двигаться по данной линии от ее начала к ее концу. При таком тесте точка контакта пули с препятствием может быть найдена заранее, при условии что все препятствия статичны, либо тест также должен поддерживать динамические препятствия.
Та ну с коллизиями оно то понятно, просто думал может есть какой то мастерский подход, который менее ресурсоёмок для проца.
Тут вот какая как бяка назрела, и букварик Страуструпа не помогает((( Как в при использовании омеги разбить исходный код на файлы, ведь при работе с ней надо кроме OMEGA_functions.h подключать еще и OMEGA_code.cpp, а если его включать в несколько файлов то выдаются ошибки типа ...OMEGA_code.cpp redefinition... и т.д. Надо стражей куда то поставить??? Объясните плиз, а то как с такими включениями кода работать я не знаю и инфы найти не могУ(((
OMEGA Engine что ли? Была где-то у автора данного движка тема или даже подраздел на одном из форумов, где он обитает... На mirgames.ru если я не ошибаюсь. Если это именно та Омега, о которой речь, пробуй связаться с автором там, на форуме.. он вроде бы поддерживал своих фанов и отвечал на вопросы.
Решил не создавать новую тему, а написать в этой. Сегодня попробовал написать вот что. При нажатии на Enter, создается объект. Объект засчитывается на счетчике. Каждый объект генерирует рандомное число. И под конец, У каждого объекта выводится адрес.
Ну адрес объекта берется так: &variable, в твоем случае &p Я не пойду что ты там выводишь, класс?))) В конструктор ты это зря такое запихнул)
Сделай в классе функцию: void write_info() {cout <<"I am object number "<<i<<" My random number is "<<r<<" My adress is ";} Переменные i и r лучше объяви внутри класса, а на конструкторе пусть они получают значение.
И выводи ее так cout<<p->write_info<<"\n";
Добавлено (04.09.2010, 15:01) --------------------------------------------- поправка &p, в данном случае ссылка на указатель получается)
Добавлено (04.09.2010, 19:53) --------------------------------------------- Ребята расскажите как вы в ваших играх разбиваете код на файлы! Я вывел отдельно классы и ресурсы в classes.h и resources.h, но там все вместе реализацией, я в принципе писал все функции прям в классах не выносил... И вот таким макаром все работает, но Страуструп говорит что нельзя реализацию в хедеры вставлять, что ее надо в сипишники отдельно ложить, почему так? Объясните как все это грамотно связать плиз....
У меня вопрос. На форме находится компонент PictureBox. Он играет роль игрока, и может передвигаться. Я пытаюсь сделать так, что бы мой ГГ, мог стрелять. Пули, я решил тоже сделать из PictureBox;
Нужно создать PictureBox в конкретных координатах.