Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пара вопросов по DelphiX [Delphi, Windows]


DanilinSA ©   (2004-05-24 14:14:00) 

Помогите решить пару вопросов:
1) В игровом проекте много ресурсов в виде картинок. Хранить в виде файлов - неудобно, хранить в DXImageList - страшно растет размер EXE файла. Так-как планируеться частая смена версий во время тестирования то не хочеться заставлять людей гонять неизменную графику по Инету.
Вопрос: Как хранить (если это можно) всю графику в DLL или отдельным файле ресурсов и при загрузке перегонять её в DXImageList?
2) Как из картинке в DXImageList вырезать фрагмент и нарисовать его на DXDraw.Surface (обычно пользуюсь Draw, но он копирует всю картинку). Это не периодический фрагмент в виде набора кадров!


Omar2002   (2004-07-05 13:50:00) [1]

Когда картинок слишком много вобще советую разбить все на несколько DXG файлов, ну и при выпуске патчей и дополнений это кстати говоря будет удобно - добавил например парочку новых юнитов - заменил один DXG файл и бинарник. А вот еще одно удобное решение проблемы - если у тебя очень много прозрачных частей на спрайтах, то весь DXG файл можно одной программкой ужать - она выкидывает эти самые области, тем самым уменьшая объем файла, правда не всегда хорошо этот процесс закончивается, иногда теряются некоторые области или с цветами глюки, но зато если все сработает - получишь вполне хороший результат. Я в одном из своих проектов ужал DXGшник в полтора раза, а это примерно 300Кб весу.


ork   (2004-05-29 11:51:00) [2]

WinPopka: нет это я DanilinSA'у, специальным редактором работать проще чем имейджлистом.


WinPopka   (2004-05-29 01:40:00) [3]

Хмм..а модуля такого у вас нету ?


DanilinSA   (2004-05-27 10:05:00) [4]

для WinPopka:
1) На этапе отладки программы загоняешь все BMP в dximagelist.
2) После завершения отладки нажимаешь на dximagelist правой кнопкой и даешь команду: "Save...". Сохраняешь содержимое в DXG файле.
3) Пакуешь все DXG в ZIP формат.
4) Подключаешь к программе компонент или модуль для распаковки ZIP файлов.
5) В нужный момент в проге ( при инициализации или нажатии какой - либо кнопки):
 а) Извлекаешь DXG из архива.
 б) dximagelist.Items.LoadFromFile(...);
 в) затираешь уже ненужный DXG

усё


WinPopka   (2004-05-26 19:18:00) [5]

это ты мне? какой такой редактор?


Ork   (2004-05-26 18:25:00) [6]

редактор DXG файлов грузи с http://daddy.mirgames.ru


WinPopka   (2004-05-26 16:35:00) [7]

DanilinSA
А не поделишься знанием?: как из zip`a брать бампшки и грузить в dximagelist?


DanilinSA   (2004-05-26 09:45:00) [8]

для kas-t:
1) Собственно к этому я и склоняюсь. При инициализации игры она будет извлекать DXG файл из ZIP архива и грузить его в DXImageList.
2) Мне не удалось резать картинку "на ходу" изменяя PattenHeight и PattenWidth !!! Причина неизвестна, но возможно нарезна происходит на этапе компиляции и при работе программы невозможна.
Я писал "Это не периодический фрагмент в виде набора кадров!" У меня в один BMP свалены иконки 16*16, 32*32 , 16*21 и т.д.  Поэтому проще воспользоваться методами Surface для копирования фрагмента.


kas-t   (2004-05-24 17:27:00) [9]

1) А ты не пробывал делать так:

DXImageList.LoadFromFile('graphicsdata.dxg');
DXImageList.SaveToFile('graphicsdata.dxg');

Можно написать небольшой редактор редактирующий библиотеки картинок.

2) Тоже велосипед... В свойствах картинки в библиотеке DXImageList ставь PattenHeight и PattenWidth - высота и размер необходимого куска. А дальше эти куски получай так: DXImageList.items.Find('sprite1').Draw(DXDraw1.surface,x,y,ani); где Ani - это номер нужного тебе куска.


Thor   (2004-05-24 17:16:00) [10]


> DanilinSA   (24.05.04 14:14)  

посмотри на DelphiGFX примеры хранения графики в архивах.
инфы по этой теме в нете - туева хуча.
поищи!


DanilinSA   (2004-05-24 16:52:00) [11]

Второй вопрос снимаеттся. Разобрался. Использовал конструкцию типа
MainForm.DXDraw.Surface.Draw(510, 404, KlastRound,  MainForm.DXDialog.Items.Find('Rowgrid').PatternSurfaces[0], false);


Наверх

Титульная страница Поиск, карта сайта Написать письмо