0

SDL_ttf を使用するコード (以下) があり、次のことを行います。

  1. コンソールのように(各文字を個々のセルに出力して)、テキストを(TTFから)整列して(バッファまたは配列にも)レンダリングできます。
  2. 点滅するカーソルを利用できるようにします (アンダースコアをレンダリングおよびレンダリング解除する可能性があります)。
  3. ユーザーがキーボードからテキストを入力できるようにし、入力時に各文字を画面に表示できるようにします ( を使用SDLK_charhere)。

#1に戻る:画面に印刷された前の文字の幅を(TTFから)取得し、その幅(ピクセル単位)を使用して、前の文字の直後に次の文字に2ピクセルを加えたものを印刷することを考えています。<-- 通常の WIN32 コンソールの文字間の間隔がピクセル単位で異なる場合は教えてください。

変更する必要があるコードは次のとおりです。

#include "include/SDL/SDL.h"
#include "include/SDL/SDL_ttf.h"

int currentX = 0;
int currentY = 0;
int newW;
int newH;
SDL_Surface* screen;
SDL_Surface* fontSurface;
SDL_Color fColor;
SDL_Rect fontRect;

SDL_Event event;

TTF_Font* font;

//Initialize the font, set to white
void fontInit(){
        TTF_Init();
        font = TTF_OpenFont("dos.ttf", 12);
        fColor.r = 0; // 255
        fColor.g = 204; // 255
        fColor.b = 0; //255
}

//Print the designated string at the specified coordinates
void PrintStr(char *c, int x, int y){
        fontSurface = TTF_RenderText_Solid(font, c, fColor);
        fontRect.x = x;
        fontRect.y = y;
        SDL_BlitSurface(fontSurface, NULL, screen, &fontRect);
        SDL_Flip(screen);
}

int main(int argc, char** argv)
{
    // Initialize the SDL library with the Video subsystem
    SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE);

    //Create the screen
    screen = SDL_SetVideoMode(320, 480, 0, SDL_SWSURFACE);

    //Initialize fonts
    fontInit();

    PrintStr("", 0, 0);

    do {
        // Process the events
        while (SDL_PollEvent(&event)) {
            switch (event.type) {

                case SDL_KEYDOWN:
                    switch (event.key.keysym.sym) {
                    // Escape forces us to quit the app
                        case SDLK_ESCAPE:
                            event.type = SDL_QUIT;
                        break;

                        default:
                        break;
                    }
                break;

            default:
            break;
        }
    }
    SDL_Delay(10);
    } while (event.type != SDL_QUIT);

    // Cleanup
    SDL_Quit();

    return 0;
}
4

1 に答える 1