Merhaba Erdem,
İlintiyi sdl.d (https://github.com/erdemoncel/oyun/blob/master/src/sdl.d)'ye ekledim ama çalıştırmada başarılı olamadım! Kafamı karıştıran bazı şeyler vardı. Örneğin hiç bir elemanı olmayan TTF_font'a anlam veremedim. Ben de hata vermesin diye hiç bir elemanı olmayan yapı ekledim. Ayrıca hata atan/yaklayan iki takma isim gördüm. Bunlara da anlam veremedim...:)
/* The internal structure containing font information */
typedef struct _TTF_Font TTF_Font;
. .
/* We'll use SDL for reporting errors */
#define TTF_SetError SDL_SetError
#define TTF_GetError SDL_GetError
Ben de son iki satırı gizledim...
Bu ilintiyi en sona (664. satır) şu başlıkla ekledim:
'extern(C) // dmd sdl -debug -L-lSDL -L-lSDL_ttf'
Ayrıca ferdi şekilde derleyebilmek için basit bir debug subroutine'i yazdım. Bir kaç düzeltmeyi ve eklemeyi de saymazsak bu kadar. Son olarak bir şey dikkatimi çekti SDL_Surface*'in iki tane takma ismi var. Bence Grafik2D'yi silelim ama sınıflarda anlamı arttırıyorsa sen bilirsin.
Renk yapısına bir kaç renk daha eklesek mi? Ben turkuaz ve siyah olmak üzere iki tane ekledim ama temel renkler dışında sarı ve gri tonları gibi renkler hoş olabilir. Neyse bunlar küçük ayrıntılar. Asıl meseleye (ekrana yazı yazamamaya) gelirsek...:)
Önce herhangi bir TTF font'u bulup aynı dizine kopyaladım ve aşağıdakine benzer şekilde yükledim. Burada sorun yok!
class Oyun : TemelOyun
{
: : :
TTF_Font * font;
this(int genişlik, int yükseklik, int çözünürlük = 0) {
: : :
font = TTF_OpenFont("arial.ttf", 16);
}
}
Ayrıca her şey kitabına göre olsun diye destructor'e de şu satırları ekledim:
TTF_CloseFont(font);
font = null;
TTF_Quit();
Son olarak bize bir işlev lazımdı o da şu olsa gerek:
public int ekranaYaz (SDL_Surface* screen, TTF_Font* font, const char* text)
{
auto color = SDL_Color(255, 255, 255, 0);
SDL_Surface* text_surface;
text_surface = TTF_RenderText_Solid(font, text, color);
if (text_surface != null)
{
SDL_BlitSurface(text_surface, null, screen, null);
SDL_FreeSurface(text_surface);
return 1;
} else {
// report error
return 0;
}
}
Ancak hata da vermiyor, çalışmıyor da... :rolleyes:
Herhalde eksik bir şeyler olsa gerek. Sanırım yazıyı taşıyan bir nesne olması gerekiyor. Bu nesnenin de konum bilgisi gibi ama başta belirttiğim gibi boş yapıyı nasıl dolduracağız? Örneğin şu işlev ile şekillendirebiliriz ama tek başına kullandığımda program çöküyor...
//TTF_SetFontStyle(font, TTF_STYLE_NORMAL);
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]