2015-11-04 58 views
0

由於某種原因,我的循環無法正常工作。我試圖創建慢速打字文本,但它只是同時打印。通過慢速打印文本,我的意思就像是RPG的對話。SDL_Delay無法在for循環中工作

這裏是我的代碼:

void printToConsole(std::string message, std::string &text){ 
    for(int i = 0; i < message.length(); i++){ 
     text += message[i]; 
     SDL_Delay(30); 
    } 
} 

如果需要的話,這裏是我的全碼:

#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, std::string &text){ 
    for(int i = 0; i < message.length(); i++){ 
     text += message[i]; 
     SDL_Delay(30); 
    } 
} 

void start(std::string &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); 

    std::string text; //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 = 10; 
    dstrect.y = 10; 
    dstrect.w = 100; 
    dstrect.h = 32; 

    while(!quit){ 
     handleEvents(e, &quit); 
     render(renderer, textTexture, srcrect, dstrect); 

     start(text); 

     textSurface = TTF_RenderText_Solid(font, text.c_str(), color); 
     textTexture = SDL_CreateTextureFromSurface(renderer, textSurface); 
    } 

    SDL_DestroyWindow(window); 
    SDL_DestroyRenderer(renderer); 

    window = NULL; 
    renderer = NULL; 
    TTF_Quit(); 
    SDL_Quit(); 
    return 0; 
} 
+0

你在哪裏將字符打印到屏幕上? 'printToConsole'不打印任何東西。 – NathanOliver

+1

'printToConsole'只緩慢複製一個字符串。在完全複製之前,您不會渲染它。 – molbdnilo

回答

1

你應該重新渲染爲每個新字符的文本增加,而不是慢慢地將其複製並然後再渲染它。

(對不起,我沒有足夠的代表評論)。