Subject : font cizimleri.. Author : pOiSOn Email : poisone@usa.net Irc : irc.ada.net.tr / #scene.tr #manowar #atheist ICQ : 6795916 LastUpdate : 12 Haziran 1999 Note : camcoder'a hediye :).. giRis fElan.. evek.. eger bir demo veya intro yazmak istiyor iseniz en onemli konu ekrana bisiler yazmak.. mesela hayatin manasi gibi ozlu sozler yazacaksaniz konu daha onem tasiyo.. bunun icin ilk karar vermeniz gereken fontlar fixed (sabit) boydami olucak yoksa degisken boyda mi ?.. fixed.. fixed cizmesi ve tasarlanmasi en kolay yontem.. her harf icin bir matris ayarlaniyor..bu matris'in icinde harf'in sekli cizili.. nasi mi ?.. asagida bir 8x8'lik matris icinde A harfinin seklini goruyorsunuz.. (en azindan gormeye calisiyosunuz.. idare edin bi coder'dan anca bu kadar oluyo grafik..) 1 2 3 4 5 6 7 8 1 0 1 1 1 1 1 1 0 2 1 0 0 0 0 0 0 1 3 1 0 0 0 0 0 0 1 4 1 0 0 0 0 0 0 1 5 1 1 1 1 1 1 1 1 6 1 0 0 0 0 0 0 1 7 1 0 0 0 0 0 0 1 8 1 0 0 0 0 0 0 1 simdi bu matrisi saklamak icin bir dizi yaratalim.. char font[256][8][8]; 256 sayisi ascii tablosundaki 256 karakter icin.. [8][8]'ler ise matrisi tanimlamak icin.. boylece her karakter icin matrisleri ayri ayri tanimlayabilirsiniz.. her sey guzel demi ?.. ehueh... daa bitmedi.. eger fontunuz renkli yani koselerde felan baska renkte pixel'ler olmasini istiyorsaniz bu yontem cok iyidir.. fakat font'u mono yani tek renk olarak kullanacaksaniz biraz daha uzerinde oynayabiliriz.. simdi dikkat ederseniz her satirda 8 tane 1 veya 0 var degil mi ?.. her satir icin 8 byte harcamak yerine her satir icin bir byte kullanabiliriz.. yanie.. 1 2 3 4 5 6 7 8 1 0 1 1 1 1 1 1 0 = 126 2 1 0 0 0 0 0 0 1 = 129 3 1 0 0 0 0 0 0 1 = 129 4 1 0 0 0 0 0 0 1 = 129 5 1 1 1 1 1 1 1 1 = 255 6 1 0 0 0 0 0 0 1 = 129 7 1 0 0 0 0 0 0 1 = 129 8 1 0 0 0 0 0 0 1 = 129 kullanabiliriz.. fakat cizim yaparkende bunu tekrar geri acmaniz gerekli.. ekrana ciziyoz.. fontu renkli cizdigimizi farz edersek bir karakter icin cizim yapan fonks.. void drawchar(char ch,int x,int y) { int s1,s2; for(s1=0; s1 < 8; s1++) for(s2=0; s2 < 8; s2++) { if ( font[ch][s2][s1] != 0) putpixel(x + s2, y + s1,font[ch][s2][s1]) } } boylece verdigimiz pozisyona karakteri cizen proc'u yazdik.. gelelim string yazanina.. void drawtext(char * text,int x,int y) { int s1; for(s1=0 ; s1> s2) & 1; if ( bit != 0) putpixel(x + s2, y + s1,font_color) } } sanirim anlasilmistir... gelelim variable boydaki fontlara.. variable boy'a ihtiyacin nedeni.. M harfi ile I harfi icin ayni genisligin kullanilmasi..buda IMMIMINIMI gibi bisi yazdiginizda deve ustundeki kelebek zarifliginde ekrana cizilmesi demektir.. bu yuzden M harfi icin ayri I harfi icin ayri genislik kullanmaniz gerekli.. eger soyle bir struct tanimlayip fontu boyle kaydederseniz prob. cikmaz.. struct fnt_char { int XSize; int YSize; char Map[MaxX][MaxY]; } struct fnt_char Font[256]; her harf icin boyle bir struct kullandiginizda hayat daha kolay olacaktir.. yapmaniz gereken drawtext fonksiyonunda her harf basildiginda x'i 9 arttirmak yerine fontun genisligi kadar arttirmak.. gelelim font dosyalarinin yapilisina.. fixed font olusturmak icin ortaliklarda bi suru editor var.. bu utility'leri kullanarak kolayca font'lari grafikerinize cizdirebilirsiniz.. mono olanlarindan bir cogu satirlari bit'lere cevirerek kaydeder.. renkli olanlar ise normal sekilde kullanabilirsiniz.. formani felan nasi diyorsaniz, font editor icinde mutlaka bir dokuman vardir ve font dosyasini nasil kullanacaginiz anlatilir.. illaki isim istiyosaniz csedit adinda bi editor var gayet hoj.. tavsie edilir.. variable font icinde simdiye kadar bir editor gormedim.. en iyisi bunu oturup kendinizin yazmasi.. veyada bir cevirici yaparak normal fontu variable haline getirebilirsiniz.. (buna biraz kafa yorarsaniz nasil yapilacagini bulursunuz..) benden bu kadar.. hadi size iyi gunner... saat 18:00 ve hava cok sicakkk..