【笙】学习贴吧SDL2.0触控,稍进阶
c4droid吧
全部回复
仅看楼主
level 13
qkqpttgf 楼主
本帖代码根据原帖【c4droid】【教程】SDL2.0实现触控方法,让屏幕跟随你的手指动起来 https://tieba.baidu.com/p/2682080782 改动。
原示例代码只是简单的示意了一下动作流跟屏幕坐标的用法。现在楼主来增改一下,增加1个显示文字的位置,然后最主要的是实现一下多点触控。
下面有些话带有强烈的主观理解,如理解方向有误,请指出。
   ——茫烟暗岭数回眸,柳絮杨花几度愁。
2015年10月16日 15点10分 1
level 13
qkqpttgf 楼主
sur = SDL_CreateRGBSurface(0, W, H, 32, 0, 0, 0, 0); // 用于画背景
sur1 = SDL_CreateRGBSurface(0, W, H, 32, 0, 0, 0, 0); // 用于画显示字的底色
SDL_FillRect(sur, NULL, 0xffacca);
// 在sur上画一个矩形
tex = SDL_CreateTextureFromSurface(ren, sur); // 把sur传递给tex
首先,为了区别整体背景跟字体显示区域,我做了两个surface,一个是粉色,一个绿色。
SDL_FillRect(sur1, NULL, 0x55ca00); // 绿底
tex1 = SDL_CreateTextureFromSurface(ren, sur1); // 把sur1传递给tex1
sur2 = TTF_RenderUTF8_Blended(font, c, color); // 让字符串生成surface表面并且传递给sur2
tex2 = SDL_CreateTextureFromSurface(ren, sur2);
做好后备用。
   ——茫烟暗岭数回眸,柳絮杨花几度愁。
2015年10月16日 15点10分 2
level 13
qkqpttgf 楼主
因为打算多次显示文字,所以把原帖显示的过程提出来做成函数。
int draw(SDL_Rect r, char *c) {
SDL_FillRect(sur1, NULL, 0x55ca00); // 绿底
tex1 = SDL_CreateTextureFromSurface(ren, sur1); // 把sur1传递给tex1
sur2 = TTF_RenderUTF8_Blended(font, c, color); // 让字符串生成surface表面并且传递给sur2
tex2 = SDL_CreateTextureFromSurface(ren, sur2);
SDL_FreeSurface(sur2);
SDL_RenderCopyEx(ren, tex1, NULL, &r, dg, NULL, SDL_FLIP_NONE); //
SDL_RenderCopyEx(ren, tex2, NULL, &r, dg, NULL, SDL_FLIP_NONE);
SDL_DestroyTexture(tex1);
SDL_DestroyTexture(tex2);
// 记得把tex都销毁,不然闪退
}
这里面的过程我理解一下,先把平面涂上颜色,然后把这块平板通过ren渲染做成电脑可以显示的编码,然后再弄到要显示的区域(以&首地址来寻找),这样一个东西就显示出来了。
我最后这个copy函数跟原帖不一样,因为是为等下转动做准备。
   ——茫烟暗岭数回眸,柳絮杨花几度愁。
2015年10月16日 16点10分 3
level 13
qkqpttgf 楼主
while (q == false) {
SDL_RenderClear(ren);
SDL_RenderCopy(ren, tex, NULL, NULL);//每次都先打粉底
sprintf(ch, "角度: %.3f 缩放: %.3f ", dg, dd);
// sprintf(ch, "X: %.3f Y: %.3f", W * x, H * y);
TTF_SizeUTF8(font, ch, &a, &b);
image.w = a;
image.h = b;
//省略x,y的处理。
draw(image, ch);
sprintf(ch, "X: %.3f Y: %.3f", W * x, H * y);
TTF_SizeUTF8(font, ch, &a, &b);
r.w = a * dd;//缩放
//省略x,y,w,h的处理,里面就是为了算中央点,让这个区域跟着手指移动
drow(r, ch);
// 刷新屏幕
SDL_RenderPresent(ren);
}
这个循环注意Render的一开始的清除跟最后的显示,我一开始放进那个函数,结果闪屏很明显,移出来就好了。
   ——水木逸清华,婉兮笙清扬。
2015年10月16日 16点10分 4
level 13
qkqpttgf 楼主
每次更改r这个区域的位置,就能跟着手指移动了,比起原示例,新人还是能有点成就感的~~~~以至于特意导成apk慢慢玩……
   ——水木逸清华,婉兮笙清扬。
2015年10月16日 16点10分 5
level 13
qkqpttgf 楼主
等下贴全代码。
   ——茫烟暗岭数回眸,柳絮杨花几度愁。
2015年10月16日 16点10分 7
[无效] http://pan.baidu.com/s/1gd6RIiJ    ——水木逸清华,婉兮笙清扬。
2015年10月16日 16点10分
level 13
qkqpttgf 楼主
没人看[不高兴]
   ——茫烟暗岭数回眸,柳絮杨花几度愁。
2015年10月26日 14点10分 8
level 12

2015年11月12日 10点11分 9
level 10
顶,收藏了
2015年11月12日 14点11分 10
level 12

2015年12月21日 13点12分 11
level 9
[真棒][真棒][真棒]
2015年12月21日 16点12分 12
level 1
顶,学习
2016年01月23日 13点01分 13
level 3

2020年04月19日 08点04分 14
1