2012-04-25 3 views
0

Я использую SDL_ttf но в mingw32, загрузить все и попробовать следующую программуSDL_ttf не работает правильно

#include <SDL.h> 
#include "SDL_ttf.h" 
#include <iostream> 

using namespace std; 

const int window_width = 600; 
const int window_height = 600; 

TTF_Font *font; 
SDL_Surface *screen; 

void init(void) 
{ 
    SDL_putenv("SDL_VIDEO_CENTERED=center"); 
    if (TTF_Init() == -1) 
    { 
    cerr << "Unable to initialize SDL_tff: " << TTF_GetError() << endl; 
    exit(1); 
    } 
    font = TTF_OpenFont("arial.ttf", 12); 

    if (SDL_Init(SDL_INIT_EVERYTHING) < 0) exit(2); 
    if ((screen = SDL_SetVideoMode(window_width, window_height, 8, SDL_HWSURFACE |  SDL_DOUBLEBUF)) == NULL) exit(3); 
} 

void drawText(SDL_Surface *screen, int x, int y, string text) 
{ 
    SDL_Color foregroundColor = { 255, 255, 255 }; 
    SDL_Color backgroundColor = { 0, 0, 255 }; 
    SDL_Surface *resulting_text; 
    SDL_Rect rect = { x, y, 0, 0 }; 
    resulting_text = TTF_RenderText_Solid(font, text.c_str(), foregroundColor); 
    cout << SDL_GetError(); 
    SDL_BlitSurface(resulting_text, NULL, screen, &rect); 
    SDL_FreeSurface(resulting_text); 
} 

void run() 
{ 
    SDL_Event event; 
    bool running = true; 
    while (running) 
    { 
    SDL_LockSurface(screen); 
    char s[256]; 
    drawText(screen, 20, 20, "text ................"); 
    SDL_UpdateRect(screen, 0, 0, window_width, window_height); 
    SDL_UnlockSurface(screen); 
    while (SDL_PollEvent(&event)) 
    { 
     if (event.type == SDL_KEYDOWN) 
     { 
    SDLKey _key = event.key.keysym.sym; 
     if ((_key == 27) || (_key == 'q') || (_key == 'Q')) 
    { 
     running = false; 
    } 
     } 
    } 
    } 
} 

INT основной (интермедиат ARGC, символ * ARGV []) { Init() ; run(); }

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

g++ SDLTestFont.cpp -o TF.exe -I"d:\SDL\include" -lmingw32 -lSDLmain 

lSDL SDL_ttf.lib -mwindows -O3 -w -static

+0

Ваш код выглядит хорошо для меня. Важно, чтобы вы установили свой видеомод до 'TTF_Init()', если я правильно помню. Это единственная возможная ошибка, о которой я могу думать сейчас. – fancyPants

+0

Является ли 'AIRAL.TTF' в текущем рабочем каталоге? – genpfault

+0

Спасибо за ваш ответ. SDL правильно инициализируется установкой видеомодуля где-то перед этим кодом. И airal.ttf хранится в системном каталоге шрифтов, поэтому SDL_ttf не будет загружать шрифт в директорию шрифтов по умолчанию? – user1285419

ответ

1

Похоже, ваш указатель шрифта не initiallized и вы передаете мусор rended_text. Я хотел бы проверить, что файл шрифта находится в папке вашего проекта и убедитесь, что орфография точна.

+0

Я просто обновил вопрос, поставив полный код ... Я также пытаюсь скопировать шрифт в текущую папку, он не работает – user1285419

+0

Я не могу найти что-то не так с вашим кодом, но я бы сказал, вы всегда должны проверьте, чтобы ваш шрифт был нулевым во время вашей функции init так же, как и на экране. Унифицированные шрифты, по-видимому, являются источником многих ошибок. Извините, я не могу больше помочь. Мне не очень удобно компилировать командную строку. –

+0

Спасибо в любом случае. Я также добавляю код для проверки экрана. Но кажется, что это не проблема, потому что я рисую какую-то строку там, но просто не рисую текст, странно – user1285419

0

У меня была аналогичная проблема с SDL_ttf сегодня. Вы уверены, что у вас есть все DLL-файлы для SDL_ttf в каталоге Project? DLL-файлы, которые поставляются с SDL_ttf.

 Смежные вопросы

  • Нет связанных вопросов^_^