首页 > 解决方案 > SDL_ttf(使用矢量渲染)

问题描述

我使用 c++ Xcode 用 SDL 制作一个简单的图表。SDL_ttf 用于添加 X 轴中行的值。问题是我不知道图中会有多少行,因为它只在运行时才知道。如果我将向量放在主循环中,则不起作用。这是不起作用的部分

for(int filas=0;filas<total_filas.size();filas++){
            rect1.x=origen-cuadricula-5;
            rect1.y=origen +(cuadricula*filas);
            rect1.h=15;
            rect1.w=15;
            int a=total_filas[filas];
            string ret=to_string(a);
            dibujo.get_text(r, ret.c_str(), font, &rect1);
        }

我怎样才能呈现这些值?非常感谢

代码下方:

我只是放了一个虚拟向量“total_filas”来模拟行选择,但这将是用户定义的。

主要的.cpp

int main(int argc, const char * argv[]) {

Dibujo dibujo;
auto cuadricula=15;
auto origen=50;
const auto Width=1300;
auto Height=0;
vector<float> total_filas={1,2,3,4,5,6,7,8,9,10};
SDL_Rect rect1 ;

Height=(int)total_filas.size() * cuadricula + (origen *2);

SDL_Window *w=SDL_CreateWindow("PyF", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, Width,Height,SDL_WINDOW_RESIZABLE);

SDL_Renderer *r = SDL_CreateRenderer(w, -1, 0);

if(TTF_Init()==-1){
    cout<<"error al inicializar ttf"<<endl;
}
 TTF_Font *font = TTF_OpenFont("/Users/Arial Unicode.ttf", 10);
if (font == NULL) {
    fprintf(stderr, "error: font not found\n");
    exit(EXIT_FAILURE);
}

for (auto done =false;!done;)
{
    SDL_Event e;
    if(!SDL_WaitEvent(&e))
    {
        done=true;
        break;
    }
        switch(e.type)
        {
            case SDL_QUIT:
                done=true;
                break;
        }
    
    SDL_SetRenderDrawColor(r, 0xff, 0xff, 0xff, 0xff);
    SDL_RenderClear(r);

    SDL_SetRenderDrawColor(r, 200, 200, 200, 0);

    for(float x=origen;x<(Width-100);x+=cuadricula)
    {
        SDL_RenderDrawLine(r,
                           x,origen,
                           x, (Height-origen));
    }
   

    
    for(float y=origen;y<(Height-origen);y+=cuadricula)
    {
    
        SDL_RenderDrawLine(r,
                           origen-cuadricula,y,
                           (Width-100),y);
    }

    SDL_SetRenderDrawColor(r, 0, 0, 0, 0);
    SDL_RenderDrawLine(r,
                       origen,(Height-origen),
                       (Width-100),(Height-origen));
    SDL_RenderDrawLine(r,
                       origen,origen,
                       origen, (Height-origen));

    for(int filas=0;filas<total_filas.size();filas++){
        rect1.x=origen-cuadricula-5;
        rect1.y=origen +(cuadricula*filas);
        rect1.h=15;
        rect1.w=15;
        int a=total_filas[filas];   
        string ret=to_string(a);
        dibujo.get_text(r, ret.c_str(), font, &rect1);
    }
    
   
        SDL_RenderPresent(r);
}
SDL_Quit();

return 0;

}

这里是 Dibujo .cpp

void Dibujo::get_text(SDL_Renderer *renderer, const char *text,TTF_Font *font, SDL_Rect *rect) {
    
    SDL_Surface *surface;
    SDL_Texture *texture;
    SDL_Color textColor = {255, 0, 0, 0};
    
    surface = TTF_RenderText_Blended(font, text, textColor);
    texture = SDL_CreateTextureFromSurface(renderer, surface);

    SDL_Rect dest={rect->x,rect->y,rect->w,rect->h};
    
    SDL_RenderCopy(renderer, texture,NULL,&dest);
    SDL_FreeSurface(surface);
    SDL_DestroyTexture(texture);
}

标签: renderingsdl

解决方案


推荐阅读