Форум: "Игры";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизПоверхности не рисуются Найти похожие ветки
← →
BoAlSe © (2005-01-05 17:43) [0]Я делаю игру на DelphiX, metal & fire называется, в сети уже давно валяется первая версия, можете посмотреть здесь:
http://boalse.narod.ru/mf.htm
Там есть одно неудобство: поверхности, созданные в видеопамяти динамически, после минимизации приложения каким-то образом приобретают размер 0х0 пикселей, поэтому при активизации они не прорисовываются. Выход я нашёл, нужно при активизации повторно назначить им нужный размер и заново прорисовать. Но есть одна особенная поверхность, это сама карта, она может менятся во время игры, на ней при необходимости рисуются следы от гусениц, гильзы, упавшие деревья (все эти прелести будут в новой версии). Поэтому при повторной перерисовке весь этот "мусор" теряется, закрашивается, чего бы не хотелось. Поверхности уничтожаются в тот момент, когда начинает меняется разрешение экрана и форма начинает сворачиваться. Вот если бы поймать событие перед этим моментом и записать поверхность в оперативную память, всё было бы ОК. Из системной потом можно легко перерисовать в видеопамять.
← →
Sapersky (2005-01-06 10:38) [1]Вот если бы поймать событие перед этим моментом и записать поверхность в оперативную память, всё было бы ОК
Теоретически можно - например, ловить WM_ACTIVATE с LoWord(wpr) = False. Но как-то сложно слишком. Поверхность в системной памяти нужно создавать (кстати, если не смущает повышенный её, памяти, расход, то можно просто создать поверхность "самой карты" как managed текстуру - тогда копия в системной для неё создаётся автоматически, и при переключении режимов она не теряется).
Неужели "мусор" нигде больше не хранится, кроме "самой карты", и нельзя его заново отрисовать?
← →
BoAlSe © (2005-01-06 14:23) [2]>Неужели "мусор" нигде больше не хранится, кроме "самой карты", и нельзя его заново отрисовать?
Я где-то читал, что в паскале (или вообще в windows) нельзя хранить более чем 256 объектов одного типа. В дальнеййшем, в справедлиаости этого утверждения я не раз убеждался - когда размер массива с объектами переваливает за какой-то предел (наверное это и есть 256) начинаются глюки. "Мусора" за игру может быть море, одни гильзы чего стоят. Если удалять более старые объекты, будет не очень красиво и менее реалистично. А поскольку вся карта у меня, эта одна поверхность, то лучше нарисовать мусор на ней, чем хранить в памяти, и при каждой смене кадра отрисовывать его.
← →
BoAlSe © (2005-01-06 14:25) [3]> тогда копия в системной для неё создаётся автоматически
при каждом флиппинге или только при минимизации? Если первое, то это будет тормозить игру. Я так думаю.
← →
miek © (2005-01-06 15:28) [4]>Я где-то читал, что в паскале (или вообще в windows) нельзя хранить более чем 256 объектов одного типа
Это что за бред?
← →
Sapersky (2005-01-06 15:36) [5]Я где-то читал, что в паскале (или вообще в windows) нельзя хранить более чем 256 объектов одного типа...когда размер массива с объектами переваливает за какой-то предел (наверное это и есть 256) начинаются глюки.
В досовском паскале размер переменной не должен превышать размер сегмента памяти (65536). В Windows - то ли 2, то ли 4 Гб. Так что глюки, батенька, у вас.
Какой именно массив используется?
А поскольку вся карта у меня, эта одна поверхность, то лучше нарисовать мусор на ней, чем хранить в памяти, и при каждой смене кадра отрисовывать его.
Размер карты в таком случае ограничен. Впрочем, если она без скроллинга (по скриншотам не разобрал)...
> тогда копия в системной для неё создаётся автоматически
при каждом флиппинге или только при минимизации?
С самого начала создаётся и постоянно существует. Все блокировки (Lock) поверхности идут через буфер в системной, а потом уже из системной DD сам по мере надобности копирует в видео.
Вообще это сделано для 3D - чтобы "на лету" подгружать нужные текстуры в видеопамять в том случае, если они все туда не влезают. Возможно, будет работать и с 2D, т.к. текстуры в DX7 - те же поверхности.
Хотя не знаю, как такая поверхность отреагирует на попытку нарисовать на ней что-то блиттингом (где нарисуется - в системной, видео, и там и там?).
Так что наверное лучше создавать буфер в системной вручную.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c