Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

Как ввести в игру свой шрифт? Стандартными средствами Delphi7.   Найти похожие ветки 

 
Creep   (2004-08-23 21:28) [0]

Как ввести в игру свой шрифт? Стандартными средствами Delphi7.


 
Zeqfreed ©   (2004-08-23 21:45) [1]

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


 
Creep   (2004-08-23 22:11) [2]

Игра также стандартными средствами delphi сделана учусь пока.
Можно былобы сделать BMP шник с шрифтом как в WINAMP, а потом  выводить. Только как?


 
gg_no_re   (2004-08-23 22:15) [3]

>а потом выводить. Только как?

средствами Delphi


 
Zeqfreed ©   (2004-08-23 22:27) [4]

BitBlt


 
Петр   (2004-08-23 22:48) [5]

Идите на хуй!


 
gg_no_re   (2004-08-24 02:07) [6]

=))) я так понял это Creep :D


 
gg_no_re   (2004-08-24 02:09) [7]

=))) я так понял это Creep :D


 
Megabyte-Ceercop ©   (2004-08-24 09:51) [8]

Проще всего - сделать все буквы одинаковой ширины, и выстроить их в цепочку в bmp.

c : byte; //код символа
Image : Tbitmap; //картина со шрифтом.

Rect.Left:= (c - 32)* SymbolWeight;
Rect.Right:= Rect.Left + SymbolWeight;
Rect.Top:= 0;
Rect.Bottom:= Image.Height;

//Получен ректангил указывающий на нужный символ, а как им пользоваться думай сам.


 
Servelat ©   (2004-08-24 18:39) [9]

Ну тут еще стоит добавить, что в bmp"шнике должны быть все символы, начиная с символа с кодом 32  (по коду Megabyte"а). И еще, очень желательно хранить ширину каждого символа (например, в массиве). А то так шрифт получится с фиксированной шириной, не красиво.
Кстати, я мучал графические шрифты. но, боюсь, примерчик смогу найти только под DirectDraw.
И еще, вот сюда зайди, тут про шрифты статья была (для DelphiX): www.mirgames.ru


 
Creep   (2004-08-24 19:24) [10]

Спасибо щас ченибудь попробую.


 
cyborg ©   (2004-08-24 20:39) [11]

Как я в Чебураторе сделал, в меню Фрипаскаля или Турбопаскаля или подобной программы есть пункт "Таблица символов". Устанавливаешь шрифт и размер шрифта окну программы в требуемый,  вызываешь таблицу и делаешь копию экрана, затем окошечко со шрифтом сохраняешь в файлик :).
Получается шрифт 32х8 символов.


 
cyborg ©   (2004-08-24 20:43) [12]

Хотя, думаю, без труда можно написать программу, которая любой шрифт виндоус, проходя по всем символам составляет таблицу в картинку.


 
Creep   (2004-08-24 21:35) [13]

Кстати gg_no_re только щас дошло про
> =))) я так понял это Creep :D
До сих пор смеюсь


 
Zer0 ©   (2004-08-24 21:54) [14]

кто-нить знает как растеризовать шрифт срествами WinAPI?
GetGlyphOutline сопротивляется изо всех сил =(
скажу большой сенкс камраду который приведет кусок кода который бы работал в консольном приложении.


 
Megabyte-Ceercop ©   (2004-08-25 07:35) [15]

Servelat ©   (24.08.04 18:39) [9]
Ну тут еще стоит добавить, что в bmp"шнике должны быть все символы, начиная с символа с кодом 32  (по коду Megabyte"а). И еще, очень желательно хранить ширину каждого символа (например, в массиве). А то так шрифт получится с фиксированной шириной, не красиво.


Ну тогда еще к ширине нужно прибавить и точку начала символа.
Чтобы долго не суммировать все предыдущие ширины символов.
Я в Киркопе так делал.


 
Zer0 ©   (2004-08-25 09:52) [16]

http://www.policyalmanac.org/games/aStarTutorial.htm
http://theory.stanford.edu/~amitp/GameProgramming/
еще архивчик из gdmag, выложу попозже =)


 
Sapersky   (2004-08-25 12:35) [17]

кто-нить знает как растеризовать шрифт срествами WinAPI?
GetGlyphOutline сопротивляется изо всех сил =(


Не совсем понял... Растеризовать - получить растр (битмап со шрифтом)? Тогда TextOut :)
Если получить векторный контур - тогда через пути (paths) можно. См. на DelphiGFX последнюю демку.


 
Servelat ©   (2004-08-25 17:14) [18]


> Ну тогда еще к ширине нужно прибавить и точку начала символа.
> Чтобы долго не суммировать все предыдущие ширины символов.

Не совсем понял о чем ты, я ничего больше не записывал в файл шрифта, только ширину, а откуда выводить легко рассчитывается. У меня это было примерно так:


 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.


 
Servelat ©   (2004-08-25 17:34) [19]

2 Megabyte-Ceercop ©
Прочитал еще раз и понял о чем ты. Мне кажется удобнее так (я так делал):
все символы вписаны в квадратики с одинаковым ребром, соответственно доступ к каждому из них тем же DelphiX"ом или иными средствами получить легко. А вот чтобы расстояние между символами было соответственно их реальной ширине, я и хранил ширину каждого символа.


 
Megabyte-Ceercop ©   (2004-08-26 06:08) [20]

Мой способ какраз на случай, когда ширина символов разная.

Inc(Dlina) подходит для отслеживания точки вывода на экране, это бесспорно, но чтобы найти точку начала символа в битмапе, быстрее взять её из заранее прощитаного массива.



Страницы: 1 вся ветка

Текущий архив: 2004.12.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.046 c
1-1102841605
Russko
2004-12-12 11:53
2004.12.26
Проверка на существование формы


3-1101788722
Frozzen
2004-11-30 07:25
2004.12.26
Права в ИБ


9-1087845784
Darthman
2004-06-21 23:23
2004.12.26
А не устраивать ли нам небольшие конкурсы по кодингу?


14-1102570620
uny
2004-12-09 08:37
2004.12.26
Mcafee 9 pro?


6-1095686893
maxistent
2004-09-20 17:28
2004.12.26
TServerSocket в консольном приложении (типа, без форм)