Форум: "Игры";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизКак ввести в игру свой шрифт? Стандартными средствами 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.037 c