![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как ввести в игру свой шрифт? Стандартными средствами Delphi7. [Delphi, Windows]
Creep © (2004-08-23 21:28:00)Как ввести в игру свой шрифт? Стандартными средствами Delphi7.
Megabyte-Ceercop (2004-08-26 06:08:00) [1]Мой способ какраз на случай, когда ширина символов разная.
Inc(Dlina) подходит для отслеживания точки вывода на экране, это бесспорно, но чтобы найти точку начала символа в битмапе, быстрее взять её из заранее прощитаного массива.
Servelat (2004-08-25 17:34:00) [2]2 Megabyte-Ceercop ©
Прочитал еще раз и понял о чем ты. Мне кажется удобнее так (я так делал):
все символы вписаны в квадратики с одинаковым ребром, соответственно доступ к каждому из них тем же DelphiX'ом или иными средствами получить легко. А вот чтобы расстояние между символами было соответственно их реальной ширине, я и хранил ширину каждого символа.
Servelat (2004-08-25 17:14:00) [3]
> Ну тогда еще к ширине нужно прибавить и точку начала символа.
> Чтобы долго не суммировать все предыдущие ширины символов.
Не совсем понял о чем ты, я ничего больше не записывал в файл шрифта, только ширину, а откуда выводить легко рассчитывается. У меня это было примерно так:
dlina:=X;
for i:=1 to Length(Text) do
begin
GP.Find(Font).PaintTo(Buffer, dlina, Y, ord(Text[i]));
Inc(dlina, FontList[num].w[ord(Text[i])]);
end;
Там строчка, начинающаяся на GP.Find... отвечает собственно за вывод на экран, последний параметр - номер тайла (куска, бишь символа) для вывода, второй и третий - координаты. Не знаю, зачем хранить еще какую-то точку начала символа. Кстати, я все символы хранил, не обрезая первые 32.
Sapersky (2004-08-25 12:35:00) [4]кто-нить знает как растеризовать шрифт срествами WinAPI?
GetGlyphOutline сопротивляется изо всех сил =(
Не совсем понял... Растеризовать - получить растр (битмап со шрифтом)? Тогда TextOut :)
Если получить векторный контур - тогда через пути (paths) можно. См. на DelphiGFX последнюю демку.
Zer0 (2004-08-25 09:52:00) [5]http://www.policyalmanac.org/games/aStarTutorial.htm
http://theory.stanford.edu/~amitp/GameProgramming/
еще архивчик из gdmag, выложу попозже =)
Megabyte-Ceercop (2004-08-25 07:35:00) [6]Servelat © (24.08.04 18:39) [9]
Ну тут еще стоит добавить, что в bmp'шнике должны быть все символы, начиная с символа с кодом 32 (по коду Megabyte'а). И еще, очень желательно хранить ширину каждого символа (например, в массиве). А то так шрифт получится с фиксированной шириной, не красиво.
Ну тогда еще к ширине нужно прибавить и точку начала символа.
Чтобы долго не суммировать все предыдущие ширины символов.
Я в Киркопе так делал.
Zer0 (2004-08-24 21:54:00) [7]кто-нить знает как растеризовать шрифт срествами WinAPI?
GetGlyphOutline сопротивляется изо всех сил =(
скажу большой сенкс камраду который приведет кусок кода который бы работал в консольном приложении.
Creep (2004-08-24 21:35:00) [8]Кстати gg_no_re только щас дошло про
> =))) я так понял это Creep :D
До сих пор смеюсь
cyborg (2004-08-24 20:43:00) [9]Хотя, думаю, без труда можно написать программу, которая любой шрифт виндоус, проходя по всем символам составляет таблицу в картинку.
cyborg (2004-08-24 20:39:00) [10]Как я в Чебураторе сделал, в меню Фрипаскаля или Турбопаскаля или подобной программы есть пункт "Таблица символов". Устанавливаешь шрифт и размер шрифта окну программы в требуемый, вызываешь таблицу и делаешь копию экрана, затем окошечко со шрифтом сохраняешь в файлик :).
Получается шрифт 32х8 символов.
Creep (2004-08-24 19:24:00) [11]Спасибо щас ченибудь попробую.
Servelat (2004-08-24 18:39:00) [12]Ну тут еще стоит добавить, что в bmp'шнике должны быть все символы, начиная с символа с кодом 32 (по коду Megabyte'а). И еще, очень желательно хранить ширину каждого символа (например, в массиве). А то так шрифт получится с фиксированной шириной, не красиво.
Кстати, я мучал графические шрифты. но, боюсь, примерчик смогу найти только под DirectDraw.
И еще, вот сюда зайди, тут про шрифты статья была (для DelphiX): www.mirgames.ru
Megabyte-Ceercop (2004-08-24 09:51:00) [13]Проще всего - сделать все буквы одинаковой ширины, и выстроить их в цепочку в bmp.
c : byte; //код символа
Image : Tbitmap; //картина со шрифтом.
Rect.Left:= (c - 32)* SymbolWeight;
Rect.Right:= Rect.Left + SymbolWeight;
Rect.Top:= 0;
Rect.Bottom:= Image.Height;
//Получен ректангил указывающий на нужный символ, а как им пользоваться думай сам.
gg_no_re (2004-08-24 02:09:00) [14]=))) я так понял это Creep :D
gg_no_re (2004-08-24 02:07:00) [15]=))) я так понял это Creep :D
Петр (2004-08-23 22:48:00) [16]Идите на хуй!
Zeqfreed (2004-08-23 22:27:00) [17]BitBlt
gg_no_re (2004-08-23 22:15:00) [18]>а потом выводить. Только как?
средствами Delphi
Creep (2004-08-23 22:11:00) [19]Игра также стандартными средствами delphi сделана учусь пока.
Можно былобы сделать BMP шник с шрифтом как в WINAMP, а потом выводить. Только как?
Zeqfreed (2004-08-23 21:45:00) [20]Хех... а как ты хочешь, чтобы он был реализован, так и вводи =)
Игра-то хоть на чем? и какой шрифт надо?