Mikle
> свою обработку
Например?
Mikle
Для тулса самое то, но я думаю вряд-ли понадобится в игре такая вот "онлайновая" обработка... В DXSound есть тонна фильтров для работы с эффектами... Можно конечно и самому но мне кажется это долго...
Сделаю универсально, чтоб и в массив можно было сохранять и в надстройку DXBuffer...
Наконец дописал либу oggvb... Теперь можно работать с ogg файлами...
Демко http://www.mx255.narod.ru/files/OggDemo.rar
Поработал с RenderTarget - ом...
Вот думаю стоит ли для него сделать функции в текстурном менеджере...
Сам текстурный менеджер будет хранить 2 сурфейса для временного хранения Z буфера и бэк буфера.
Примерно так:
core.Textures.BeginRenderTarget() 'сохранит буферы 'Что то рендерим в другие текстуры core.Textures.EndRenderTarget() 'загрузит их обратно
Причем при потере устройства, вызовами:
core.Textures.ReloadTextures 'получим сурфейсы core.Textures.FreeTextures 'освободим сурфейсы
И отдельно сделать класс-надстройку для сурфейсов:
RenderTarget.Init(render_texture_id, surface_level, stancil_texture_id, surface_level) RenderTarget.Begin() 'рисуем RenderTarget.End() RenderTarget.GetRenderTexture() RenderTarget.GetStancilTexture()
Выглядит удобно. Но мне кажется, что для 2D движка это уже перебор, я бы сосредоточился на простоте использования, а не на технических возможностях.
Mikle
> 2D движка
В дальнейшем планируется и 3D функционал... Но только тогда, когда 2D станет более-менее юзабелен...
Mikle
> простоте использования
В смысле?
max255
> В смысле?
Что-то типа конструктора, чтобы пользователь мог вообще ничего не знать про DirecvX, а пользовался ф-циями типа:
CreateMap (MapType As tMapType, fName As String)
Map.Collision(Src As Animation) As Boolean
и т. п., это только для примера.
Mikle
Можно такое сделать... Это добавит еще классов в двиг...
Сейчас как раз делаю физику [file=73938]
Правда самое сложное - это колизии многоугольников, еще впереди...
Mikle
> типа конструктора
Случаем не отдельная IDE?
max255
> Случаем не отдельная IDE?
Сам же понимаешь, задача почти непосильная.
Нет, просто набор ф-ций-классов, абстрагирующих создание простых игр определённого жанра. Плюс набор простых утилит - редакторов карт, конвертнров форматов и т. п.
max255
> Сейчас как раз делаю физику
Прикольно!
Но сложнее не сделать саму физику, а сделать так, чтобы твою физику применять было легче и проще, чем написать свою, вот о чём я.
Запутался с менеджером шрифтов... Шрифты же тоже надо перезагружать после LostDevice...
Как его лучше организовать...
Сейчас шрифт - это отдельный класс с текстурой и массивами текстурных координат и размерами 256 символов(решил рассчитывать их заранее, а не в каждом кадре)
А менеджер - массив с указателями на эти шрифты. Выборка и поиск только по ид в массиве...
Работа с шрифтами через функции переходники типа:
Public Function DrawText(text) fonts(selected_font).DrawText(text) End Function
В общем доделал менеджер...
Сейчас выглядит так:
'Инициализация (10 - максимальное количество шрифтов менеджера)
fonts.Init 10
'Создание шрифта
fn = fonts.CreateFont("Monotype Corsiva", 25, 0, 0, 0, 0, , , 4, D3DUSAGE_DYNAMIC Or D3DUSAGE_AUTOGENMIPMAP, D3DPOOL_DEFAULT)
'Установка шрифта
fonts.SelectFont fn
'Использование
fonts.СurrentFont.DrawText 10, 10, "Текст которого нет", &HFF909090, &HFF101010
fonts.СurrentFont.DrawAlignText g_2D.GetView, MX_H_MIDDLE, MX_V_TOP, "Align text", &HFF909090, &HFF101010Я так понял, &HFF909090 и &HFF101010 - это ForeColor и BackColor? Альфа работает?
Зачем D3DUSAGE_AUTOGENMIPMAP в шрифтах?
Mikle
> &HFF909090 и &HFF101010 - это ForeColor и BackColor?
Да все верно...
Альфа тоже работает, все по тому же принципу:
Текстурная альфа(рассчитанная при создании шрифта) умножается с дифузной, затем блендится с BackColor(который находится в TEXTUREFACTOR)
If SetStates Then
g_dev.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1
g_dev.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_DIFFUSE
g_dev.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE
g_dev.SetTextureStageState 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE
g_dev.SetTextureStageState 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE
g_dev.SetTextureStageState 1, D3DTSS_COLOROP, D3DTOP_BLENDCURRENTALPHA
g_dev.SetTextureStageState 1, D3DTSS_COLORARG1, D3DTA_CURRENT
g_dev.SetTextureStageState 1, D3DTSS_COLORARG2, D3DTA_TFACTOR
g_dev.SetTextureStageState 1, D3DTSS_ALPHAOP, D3DTOP_BLENDCURRENTALPHA
g_dev.SetTextureStageState 1, D3DTSS_ALPHAARG1, D3DTA_CURRENT
g_dev.SetTextureStageState 1, D3DTSS_ALPHAARG2, D3DTA_TFACTOR
g_dev.SetRenderState D3DRS_TEXTUREFACTOR, bgColor
End IfMikle
> Зачем D3DUSAGE_AUTOGENMIPMAP в шрифтах?
Не обращай внимания... Просто проверял работают ли уровни... Оказалось для таких (NO_POW2) текстур нет...
Единственный минус менеджера, что он создает каждый раз новый GDI шрифт(0,000001 сек)...
А плюсы это то, что не нужно их больше перезагружать, менеджер делает все сам.
И при попытке создать шрифт с похожими параметрами "на руки" выдаст тот что уже есть и увеличит счетчик.
Внутренняя текстура с символами освобождается и перезагружается текстурным менеджером.
Mikle
Теперь, думаю можно браться за простенький GUI...
Как думаешь что из элементов необходимо? Хотя бы окно, и кнопка?
max255
> Теперь, думаю можно браться за простенький GUI...
> Как думаешь что из элементов необходимо? Хотя бы окно, и кнопка?
Какой самый распространённый элемент в играх? Что-то типа TreeView или DirListBox, только вместо папок - пункты и подпункты меню. Именно так делается меню в большинстве игр.
Тема в архиве.