GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (227 стр.)

Сообщения на форуме пользователя Andrey (227 стр.)

Тема диплома: Программное обеспечение для создания компьютерных игр28 фев. 200513:54#18
asmzx
>суть не в том как обозвать название темы - мне мой руководитель сказал что такое название лучше и я ему верю. наши >преподы далеки от этой темы очень сильно и если я начну качать права насчет названия могут вообще сказать делай БД и >не выпендриваяся. суть не в названии а в оформлении. кто нить что нить подобное оформлял или нет, меня интерисуют >тонкости чего и как писать в пояснительной записке

Охренеть у меня такая - же ситуация!!! преподы далеки от 3D графики.А делай БД это точно...на большее ума увы...

ООП. Как избежать приведения предка к классу-потомку??28 фев. 20059:52#25
Cyclone
А почему бы не добавить к каждому классу метод что-то типа того:
class CCar : public CMovingObject {
....
public:
//типы объектов
enum {car  = 1};
...
//тип объекта
virtual const int returnTypeClass() const
{
     return car;
}
};
class CMan : public CMovingObject {
....
public:
//типы объектов
enum {man  = 1};
...
//тип объекта
virtual const int returnTypeClass() const
{
     return man;
};

Правка опечатка car/man

а потом через switch/case смотреть тип объекта? может будет быстрей через

dynamic_cast
...

Правка: 28 фев. 2005 9:53

STL, проблема с map: Утечка памяти25 фев. 200514:58#24
IROV..
Где ее скачать бесплатно можно? много занимает?
STL, проблема с map: Утечка памяти25 фев. 20059:00#19
A_K
dub
для удобстава я завел
метод:
//Добавление объекта
void AddObject(const string& name, DisplayedObject* object)
{
	array.insert(pair<string, DisplayedObject*> (name, object));
}
IROV..
Спасибо за программу поищу... :)


Vladimir Stroyev
petrovv
_KAIN_
Disabled
IROV..
A_K
dub
Спасибо всем большое!!!! Вчера вечером посидел сделала тестолвую программу, ошибку нашел
короче дело в том что  указатель на объект класса  Effect
инициализируется вот так:

class Particles  {//класс частиц
public:
	Vector4D color;//Цвет частиц
	Vector3D Position;//Позиция частиц
	Vector3D velocity;//Скорость частиц
	Particles(){};
	Particles(const Particles& particle)
	{
		color = particle.color;
		Position = particle.Position;
		velocity = particle.velocity;
	};
	~Particles(){};
};
//Инициализация
int i;
	FlagDraw = false;
	Particles particle;
	for (i = 0; i < MaxParticles; i++ ) {
		particle.color.x = 0.02f * (rand() % 10);
		particle.color.y = 0.04f * (rand() % 20);
		particle.color.z = 0.03f * (rand() % 30);
		particle.color.w = 1.0f;
		particle.Position.x = -100.0f + rand() % 200;
		particle.Position.y = -10.0f + rand() % 20;
		particle.Position.z = -100.0f + rand() % 200;
		particles.push_back(particle);
	}
и вот после того как убрать эту инициализацию все работает!!!!
иными словами также работает если этот укзатель не записывать в контейнер т.е. без этой строчки:
//Добавление объектов в контейнер
array.insert(pair<string, DisplayedObject*> ("effect", effect));
Ну что теперь на это скажите?

STL, проблема с map: Утечка памяти24 фев. 200518:17#9
petrovv
>Если система ведет себя по разному в Release и в DEBUG то надо искать
ошибку в коде.
>Прверь инициализацию переменных.

хорошо я проверю еще внимательнее
но в чем же дело если при компиляции на Visual C++ 6.0 все работает а на Visual C++ .Net нет?
_KAIN_
petrovv
Спасибо что откликнулись.

STL, проблема с map: Утечка памяти24 фев. 200517:49#7
petrovv
>Это не показатель утечки памяти. А DEBUG варианте при запуске не из среды
>и последующим просмотре в диспечере задач такой картины не наблюдается?
Да такой картины не наблюдается

_KAIN_
petrovv
А что можете сказать по поводу того что это работает в Visual C++ 6.0 ?
или есои заменить map на vector?

STL, проблема с map: Утечка памяти24 фев. 200517:20#4
petrovv
запускаю движок.А он как обычно долго игнициализируется я запускаю диспетчер задач и вижу что память жутко увеличивается... Это сразу бросилось в глаза , а движок не начинает рендерить сцену как обычно.Вот и все.
STL, проблема с map: Утечка памяти24 фев. 200516:33#2
Vladimir Stroyev
>Проблема то элементарная, а убирать за тобой кто будет? Что то типа этого в конце программы:
>map<string, DisplayedObject*>::iterator it = array.begin(), end = array.end();
>for(; it != end; ++it)
> delete it->second;
Это естественно я делаю
//Удаление всех элементов
	while (!array.empty())
		//Указатель на первый элемент
		it = array.begin();
		//получение указктеля
		object = (*it).second;
		//Удаление из  памяти
		if (object)
			delete object;
		object = NULL;
		//Удаление из контейнера
		array.erase(it);
	}
Всетаки ты не понял утечка памяти происходит сразу после добавления первого объекта в контейнер.Еще до отрисовки сцены и до завершения программы.
Что еще можешь подсказать?


>А вообще - довольно опасная конструкция. Рекомендую изучить понятие - умный указатель. И писать что то типа:
>map<string, ref_ptr<DisplayedObject> > array;
Про Smart Ptr я слышал многое имею представление, но пока не использую.
почему-же работает мереджер ресурсов? или vector ?

STL, проблема с map: Утечка памяти24 фев. 200515:48#0
Привет всем !!!!

Программирую в среде Visual C++ .Net 2001
для рендера использую контейнер в виде map:

//Контейнер объектов
map<string, DisplayedObject*> array;
[/code ]

где DisplayedObject   - абстрактный базовый класс отображаемого
[code = cpp]
class DisplayedObject { //Абстрактный класс отображаемого объекта
public:
	//Отображение объекта
	virtual void Draw(Camera& camera) = 0;
	DisplayedObject(){}
	virtual ~DisplayedObject() {};
};

создаю и добавляю объекты вот таким способом:

DisplayedObject* landScape = new LandScape;
DisplayedObject *sky = new Sky;
human = new Human(Vector3D(0,0,-5));
DisplayedObject *light = new Light;
DisplayedObject *effect = new Effect ;
static_cast<Effect*> (effect) -> SetParticles(1500);
static_cast<Effect*> (effect) -> SetFlagDrawParticles(true);
//Добавление объектов в контейнер
array.insert(pair<string, DisplayedObject*> ("effect", effect));
array.insert(pair<string, DisplayedObject*> ("light", light));
array.insert(pair<string, DisplayedObject*> ("sky", sky));
array.insert(pair<string, DisplayedObject*> ("human", human));
array.insert(pair<string, DisplayedObject*> ("landScape", landScape));

где  LandScape,  Sky, Light, Effect, Human это классы унаследованные от DisplayedObject
Проблема в том что при запуске из среды в Release или Debug режиме все работает нормально,
но при запуске не из среды  возникает утечка памяти, при условии если проект скомпилирован в
Release режиме.С запуском не из среды при компиляции в Debug режиме проблем нет.
Для выявления подозрительного места на предмет утечки памяти, я вставлял MessageBox'ы,
при этом выяснилось, что  утечка памяти начинается сразу после строки с выводом сообщения :

MessageBox(NULL, "Добавление объектов в контейнер", "Info", MB_OK);
//Добавление объектов в контейнер
array.insert(pair<string, DisplayedObject*> ("effect", effect));
//...
Следует заметить что таким же контейнером  снабжем мой менеджер ресуросов и он работает:
//...
//Контейнер созданных ресурсов
map<string, Resource*> ListResource;
//...
//Создание ресурса для файлов TGA
Resource *tga = new TgaResource;
//Заносим в список ресурсов
ListResource.insert(pair<string, Resource*> ("TGA", tga));
//....
Так-же не следует делать тестовый пример для работы с map т.к дело не в этом.
Еще отмечу что нет проблем с компиляцией в Release режиме в среде Visual C++ 6.0  и последующим запуском.
Кто нибудь встречался с такой подобной проблемой?
Прошу помощи в ее решении данной проблемой.Заранее всем спасибо.
С уважением Андрей Геец.

Что вы на это скажите(статья про язык С++)22 фев. 200518:03#139
aruslan
Спасибо за мнение я от тебя его очень ждал!!!
steps
Здравствуйте не ожидал вас тут увидеть спасибо за вашу книгу "Графика трехмерной компьютерной игры на основе OpenGL"
Почитав вашу статью я многое понял, буду пытаться программировать на этом замечательном языке поосторожней.
Буду тестировать свои разработки чтобы на предмет падения через 2 недели  :)
Проверка столкновений22 фев. 200516:05#6
LoKy
Просто круто нет слов!!!!....
DirectInput - в Debug всё ок. в Release мыша не работает22 фев. 200513:54#2
progman
Ты отлаживать пробовал?
в каком месте что происходит посмотри
if( FAILED( hr = g_pMouse->SetDataFormat( &c_dfDIMouse2) ) )
        return hr;
вот так попробуй
Проблемы с отрисовкой узлов Octree-дерева16 фев. 200515:32#9
All
Больше никто не может мне помочь?
У меня опять просьба - протестируйте :)16 фев. 200515:29#12
Smooth
Celeron 2400
Geforce 5200
256 RAM
20-30 fps тормозов нет
Библиотека OpenIL. (Комментарии к статье)16 фев. 200512:39#49
Axel_sv
ага спасибо учтем...:)

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр