Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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.073 c
3-1109232078
Топпер
2005-02-24 11:01
2005.03.27
Log FireBird1.5 SS под Linux


11-1093507527
ssk
2004-08-26 12:05
2005.03.27
На форме в DLL не обрабатываются кнопки по умолчанию


1-1110913377
Sewix
2005-03-15 22:02
2005.03.27
Нехватает Longword


1-1111061635
Быстрый Шу
2005-03-17 15:13
2005.03.27
Приведение типа Variant


1-1111060983
Dr.Alex
2005-03-17 15:03
2005.03.27
Массивы.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский