0

私はSDL_ttfを使用していますが、mingw32では、すべてをダウンロードして次のプログラムを試します

#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 main(int argc, char* argv[]) { init(); 走る(); }

わかりましたので、ここにすべてのコードを投稿します。フォントファイルも現在のフォルダーにコピーしますが、効果がなく、エラーや警告も表示されません。これをmingw32で次のコマンドでコンパイルします

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

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

4

2 に答える 2

1

フォント ポインターが初期化されておらず、rended_text にゴミを渡しているようです。フォント ファイルが実際にプロジェクト フォルダーにあることを確認し、スペルが正確であることを確認します。

于 2012-04-25T15:37:14.047 に答える