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

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

Как ввести в игру свой шрифт? Стандартными средствами 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]

Хех... а как ты хочешь, чтобы он был реализован, так и вводи =)
Игра-то хоть на чем? и какой шрифт надо?


Наверх

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