rendering - 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);
}
解决方案
推荐阅读
- react-native - 如何在 react-native 抽屉导航中更改特定屏幕上的屏幕背景颜色?
- android - Flutter Ad Mob 在使用真实 App Id 时使我的 Android 应用崩溃
- c# - ASP .NET Identity Owin PasswordSignInAsync 方法有时不起作用
- ios - 关闭活动工作表的正确方法?
- sql-server - 使用连接的子查询提高更新性能
- r - 如何进行 10-最近邻倾向得分匹配?我似乎只在网上找到了 1-1 个最近邻匹配
- vue.js - 从非 vue 文件访问 vue 3 应用实例 api
- python-3.x - Excel - 工作表到 Parquet
- .net - 在远程机器上卸载 .net core sdk 1.x
- javascript - 在反应路线之间共享数据