关于SDL2画线和设置默认背景色,求范例
sdl吧
全部回复
仅看楼主
level 3
RT,折腾了好久终于把SDL库打包好可以用了,刚刚学会加载一张BMP图片当背景图,现在打算去试着在背景图上画一条直线,我看到sdl_drawLine.h里面有个SDL_DrawLine(SDL_Surface * dst, int x1, int y1, int x2, int y2, Uint32 color);这个方法,看样子就是用来画线的,但是我画线都不成功,求个画线的栗子,另外再问下要如何设置一个自定义颜色的背景,不用加载图片的
2015年09月08日 01点09分 1
level 3
@小牛_牛sky 先试试召唤大法
2015年09月08日 01点09分 2
level 10
先画在surface上,再用surface创建texture,把texture绘制到render上,最后把render显示出来
2015年09月08日 02点09分 3
整个过程大概明白,只是不知道要怎么把线画上surface上,求扫盲
2015年09月08日 02点09分
就用上面写的那个画啊
2015年09月08日 02点09分
回复
��β�׺���
: 我把我写的贴出来了,我写的只加载了背景图,并没有在图上画线,看三楼
2015年09月08日 02点09分
没必要画surf上可直接渲染到屏幕。
2015年09月08日 14点09分
level 3
static SDL_Texture *texture = 0;
///更新界面
void ren(SDL_Renderer *renderer) {
/* fill background in with black */
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, NULL);
/* update screen */
SDL_RenderPresent(renderer);
}
///初始化纹理
void initializeText(SDL_Renderer *renderer) {
SDL_Surface *bmp_surface;
/* load the bmp */
bmp_surface = SDL_LoadBMP("space.bmp");
if (bmp_surface == NULL) {
fatalError("could not load bmp");
}
SDL_DrawLineB(bmp_surface, 0, 0, 200, 350, 0x80808);
texture = SDL_CreateTextureFromSurface(renderer, bmp_surface);
if (texture == 0) {
fatalError("could not create texture");
}
// SDL_SetColorKey(bmp_surface, 1,
// SDL_MapRGB(bmp_surface->format, 0, 0, 255));
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
// /* free up allocated memory */
SDL_FreeSurface(bmp_surface);
}
int main(int argc, char *argv[]) {
SDL_Window *window;
SDL_Renderer *render;
/* 初始化 SDL */
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
fatalError("Could not initialize SDL");
}
/* 创建window */
window = SDL_CreateWindow("加载背景图", 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS);
/* 设置渲染器 */
render = SDL_CreateRenderer(window, -1, 0);
initializeText(render);
int done = 0;
while (!done) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
done = 1;
}
}
ren(render);
SDL_Delay(1000);
}
/* cleanup */
SDL_DestroyTexture(texture);
/* shutdown SDL */
SDL_Quit();
return 0;
}
2015年09月08日 02点09分 4
回复 a6802810 : 颜色相关的参数一律mapRGB稳妥些,直接用数字很有可能会设置错颜色。
2015年09月09日 04点09分
level 10
你建个opengl窗口干嘛。。。
2015年09月08日 03点09分 5
gl窗口只能用gl函数画
2015年09月08日 03点09分
改成SDL_WINDOW_SHOWN这样后虽然还是没有显示出线,但之前没有显示出的运行商,时间什么的都显示出来了,[呵呵]
2015年09月08日 03点09分
@再睡一下-ლ 我怎么没有找到sdl_drawline函数?
2015年09月08日 03点09分
回复
��β�׺���
: 并没见过这种说法,依然可以用SDL的api。 运行商是什么。。
2015年09月08日 15点09分
level 10
创建渲染器那里的0是什么?_?不要直接用数字。。。
2015年09月08日 03点09分 6
这是看它iOS的demo对着抄的。。。还不明白0是什么意思....然后我看了下别人的代码,把0改成了SDL_RENDERER_TARGETTEXTURE,不知道对不对
2015年09月08日 04点09分
level 10
只用过这个
2015年09月08日 04点09分 7
改成那样以后还是没有显示出我想要的直线.....能不能上个画线的代码参考下[呵呵],我的是iOS平台下用的,不知道有没什么不同,先谢谢了
2015年09月08日 06点09分
level 13
这画的话效率还行,就是我想问,怎么划线到surface???
2015年09月08日 06点09分 8
我也不懂...我是接手移植项目到iOS平台下,原来就是用SDL_DrawLine(SDL_Surface * dst, int x1, int y1, int x2, int y2, Uint32 color);这个方法来画线的,我试了一直没成功,所以来问问你们是怎么画线的
2015年09月08日 06点09分
原来的代码是可以画出线的,只不过Uint32 color这个参数没有生效,线默认是黑色,我拿来当背景图的图片也是黑色........
2015年09月08日 08点09分
谢谢您的帮忙,你我按照你给的链接画出了个圆,只可惜不知道为毛我画出的是个正方形,正方形中心有个圆
2015年09月08日 08点09分
回复 a6802810 :是啊,那个正方形是我为了突出里面的圆的,,,,, 仔细看看代码还有wiki就会知道了
2015年09月08日 10点09分
level 13
貌似没有的,可以直接画到texture上,精品贴有的
2015年09月08日 06点09分 9
没找到,求传送
2015年09月08日 06点09分
回复 a6802810 :https://tieba.baidu.com/p/3927916731?share=9105&fr=share 镇贴的图片画面有些渣,,,,
2015年09月08日 07点09分
level 10
感觉楼主的SDL有问题,这个SDL_DrawLineB是在哪个头文件里声明的?好像没有这个函数
2015年09月08日 07点09分 10
没有SDL_drawLine.h。。。
2015年09月08日 07点09分
在render/software文件夹里[呵呵]
2015年09月08日 08点09分
问题已经知道是什么原因了,原来代码是已经生效了的,只不过不知道为什么最后那个颜色参数并没有调用,默认显示黑色,然后,我刚好拿了张黑色的图片当背景图.....so,还是谢谢你的热心回答。
2015年09月08日 08点09分
回复 a6802810 :(⊙o⊙)…,遇到过
2015年09月08日 08点09分
level 11
int SDL_RenderDrawLine(SDL_Renderer* renderer,
int x1,
int y1,
int x2,
int y2)
另外还有SDL_RenderDrawLines
2015年09月08日 14点09分 11
这个也是可以的,只不过我是接手移植的项目,代码别人写好了,要改怕改太多,能不改动太多解决是最好的,要不是最后发现suface的方法可用,我就打算用这个了的,谢谢回答~[呵呵]
2015年09月09日 00点09分
@再睡一下-ლ 这个函数怎么改变线的颜色
2021年08月09日 08点08分
1