我不知道這裏發生了什麼,雖然它很酷且奇怪的令人毛骨悚然,但這並不是我真正想到的。奇怪的文字界面打印
基本上;我試圖實現一個程序,在黑色界面上減慢文本類型。我正在使用SDL2和SDL2_TTF來完成這個任務,並且事情已經順利完成。
忽略FPS計數器,這只是Nvidia的。
我真的不知道發生了什麼,我使用的字體是「Hack-Regular.ttf」。
走上代碼:
#include<iostream>
#include<SDL.h>
#include<string>
#include<SDL_ttf.h>
void handleEvents(SDL_Event e, bool* quit){
while(SDL_PollEvent(&e) > 0){
if(e.type == SDL_QUIT){
*quit = true;
}
}
}
void render(SDL_Renderer* renderer, SDL_Texture* textToRender, SDL_Rect srcrect, SDL_Rect dstrect){
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, textToRender, &srcrect, &dstrect);
SDL_RenderPresent(renderer);
}
void printToConsole(std::string message, char* text){
for(int i = 0; i < message.length(); i++){
*text = *text + message.at(i);
SDL_Delay(30);
}
}
void start(char text){
printToConsole("Hey ;)", &text);
}
int main(int argc, char *argv[]) {
SDL_Init(SDL_INIT_EVERYTHING);
TTF_Init();
SDL_Window* window = SDL_CreateWindow("Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 600, 600, SDL_RENDERER_ACCELERATED);
SDL_Renderer* renderer = SDL_CreateRenderer(window, 0, 0);
char text = 'asdf'; //This is the text that has been rendered.
bool quit = false;
SDL_Event e;
TTF_Font* font = TTF_OpenFont("Hack-Regular.ttf", 28);
SDL_Color color = {255, 255, 255};
SDL_Surface* textSurface;
SDL_Texture* textTexture;
SDL_Rect srcrect;
SDL_Rect dstrect;
srcrect.x = 0;
srcrect.y = 0;
srcrect.w = 100;
srcrect.h = 32;
dstrect.x = 640/2;
dstrect.y = 480/2;
dstrect.w = 100;
dstrect.h = 32;
while(!quit){
handleEvents(e, &quit);
render(renderer, textTexture, srcrect, dstrect);
start(text);
textSurface = TTF_RenderText_Solid(font, &text, color);
textTexture = SDL_CreateTextureFromSurface(renderer, textSurface);
}
SDL_DestroyWindow(window);
SDL_DestroyRenderer(renderer);
window = NULL;
renderer = NULL;
TTF_Quit();
SDL_Quit();
return 0;
}
我的道歉,如果是很難讀,我覺得沒必要使用多個類。
需要注意的是,「f」是'asdf'的最後一個字母我將文本定義爲最初,不知道爲什麼它從那裏開始。
爲什麼'start()'採用'char'參數而不是'char *'?無論哪種方式,'printToConsole()'中的'&text'參數都不是很有意義。 – genpfault
爲什麼'char text ='asdf''而不是'char * text =「asdf」'? – genpfault