SDL2.0实现触控方法,让屏幕跟随你的手指动起来

转自 :http://tieba.baidu.com/p/2682080782

  • 只看楼主
  • 收藏

  • 回复
  • 傻傻_痴痴
  • 吧主
    12
好久没有发帖了,看到有好多同学想要SDL2.0实现触控的教程,今天我就发一个SDL2.0实现触控教程给大家。SDL2.0刚刚出来,几乎没有任何教程,我是看SDL2.0的API来写的,如果有什么出错的地方大家可以纠正。
好了,让我们开始吧。


  • 回复
  • 1楼
  • 2013-11-01 21:55
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴
  • 吧主
    12
首先我们来分析一下SDL2.0头文件里的events.h,这家伙里面装的全是Event的事件类型,比如判断按键被是否按下我们可以这样判断,if(event.type==SDL_KEYDOWN),而SDL_KEYDOWN就在里面被定义。


回复
  • 2楼
  • 2013-11-01 22:02
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴
  • 吧主
    12
我们很快就可以找到有关触控的3个类型,它们分别是:
/* Touch events */
SDL_FINGERDOWN ,
SDL_FINGERUP,
SDL_FINGERMOTION,
而SDL1.2是没有这三个类型的,很容易知道这三个是关于触控事件的type。
顾名思义,我们看名字就可以联想这三个分别使用的地方了吧?

SDL_FINGERDOWN //这个是当屏幕被触控时
SDL_FINGERUP //把手指抬起,没有触控发生时
SDL_FINGERMOTION //这个就是你的手指在屏幕上移动时


回复
  • 3楼
  • 2013-11-01 22:08
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴
  • 吧主
    12
下课了,回宿舍再继续给大家更


收起回复
  • 4楼
  • 2013-11-01 22:09
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • tenlee2012:  敢问楼主哪个学校吧。。。?
    2014-6-3 22:20 回复
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第1张图片
    rze丶幕恋:  回复 tenlee2012 :挖掘机技工学校
    2015-5-9 12:30 回复
  • 我也说一句

     

  • 傻傻_痴痴
  • 吧主
    12
@PanXuesen8


收起回复
  • 5楼
  • 2013-11-01 22:20
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴:  @yangyianni
    2013-11-1 23:31 回复
  • PanXuesen8: 
    2013-11-1 23:54 回复
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第2张图片
    lunhui000:  想做个让别人羡慕的个性网站,并且用它来实现自己的梦想,搜索 小白资源网 让你成就梦想
    2015-8-20 18:45 回复
  • 摩西13:  留什么私信啊,有没有用还不知道呢,不如自己直接去下载啊,百度搜 小白资源网 都是百度云盘资料一键转存, 还都是免费的哦
    2015-8-22 16:22 回复
  • momaek0312:  新手的 还有配套的视频 源码 编程是新手成长的好地方 分享技术交流就是 小白资源网 给大家一个共同学习和成长的机会 全部资源免费下载
    2015-10-17 05:58 回复
  • 我也说一句

    还有1条回复,点击查看

  • 贴吧游戏
听说来玩的都领了T豆!  贴吧用户专享福利,你领了么? 
  • 推荐 来自 贴吧游戏
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第3张图片
  • QingFLS
  • 小吧主
    12
用不了SDL2的孩子哭了T^T


收起回复
  • 6楼
  • 2013-11-01 22:31
  • 举报 |个人企业举报垃圾信息举报
  • 来自手机贴吧
  • 傻傻_痴痴:  有系统限制的吗?我是4.1系统的
    2013-11-1 23:13 回复
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第4张图片
    QingFLS:  回复 @傻傻_痴痴 :似乎是3.0才可用,我个倒霉的2.3T^T
    2013-11-2 10:25 回复
  • 51popo:  回复 QingFLS :原来如此!我也是2.3,折腾了两个星期也没把hello.bmp放到屏幕上。SDL_LoadBMP()总是返回-1
    2013-11-2 13:29 回复
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第5张图片
    QingFLS:  回复 @51popo :额?我也是听别人说的,没查过,反正我新版的C4都装不了,只能用SDL1.2......你的都可以写代码了?就算返回-1也至少说明可以运行啊,确定路径什么的都对?回去我也要再试试
    2013-11-2 13:51 回复
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第6张图片
    QingFLS:  回复 @51popo :哇,发现我安装了4.09的c4后可以用sdl2了!开心^-^
    2013-11-3 18:55 回复
  • 我也说一句

    还有7条回复,点击查看

  • 傻傻_痴痴
  • 吧主
    12
好了,知道这三个类型了,那我们怎么去获取坐标位置呢?
让我们继续往下看,可以找到
/**
* \brief Touch finger event structure (event.tfinger.*)
*/
typedef struct SDL_TouchFingerEvent
{
Uint32 type; /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */
Uint32 timestamp;
SDL_TouchID touchId; /**< The touch device id */
SDL_FingerID fingerId;
float x; /**< Normalized in the range 0...1 */
float y; /**< Normalized in the range 0...1 */
float dx; /**< Normalized in the range 0...1 */
float dy; /**< Normalized in the range 0...1 */
float pressure; /**< Normalized in the range 0...1 */
} SDL_TouchFingerEvent;
其他的我们不用管,只需知道
float x,
float y,
这两个就是触控位置的x,y坐标轴,再看最上面的那行注释中的括号(event.tfinger.*)
现在就可以知道使用方法了。
现在定义一个event
SDL_Event event;
float x,y;//用于获取坐标
while(SDL_PollEvent(&event))//当有事件发生
{
if(event.type==SDL_FINGERDOWN)
//如果事件的类型为屏幕被点击
{
x=event.tfinger.x; 
y=event.tfinger.y;
//获取坐标
}
}


回复
  • 8楼
  • 2013-11-01 22:33
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴
  • 吧主
    12
PS: 这里有个问题必须要注意,很严重的一个问题。 SDL2.0触屏的x,y是使用float浮点形,X与Y是不会大于1,取值范围在0 int x,y;
x=event.tfinger.x*100;
y=event.tfinger.y*100;


收起回复
  • 9楼
  • 2013-11-01 22:39
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第7张图片
    shaonialife:  x,y应该是指占屏幕长和高的百分比吧,可以定义两个int,一个width和一个hight,然后用 SDL_GetWindowSize(window,&width,&hight);来获得当前屏幕的宽度和高度,x*width和y*hight才是我们触摸的点的坐标。
    2013-11-19 00:20 回复
  • 傻傻_痴痴:  回复 shaonialife :欢迎纠正,当时应该说成百分比来更好点,太匆忙了
    2013-11-19 00:45 回复
  • 我也说一句

     

  • 傻傻_痴痴
  • 吧主
    12
好了,现在我们了解了获取坐标x,y那我们怎么去获取滑动方向呢?
我们在上面还发现两个float浮点型,
float dx,
float dy,
就是利用这两个获取方向,要注意,这两个的值很小很小


收起回复
  • 10楼
  • 2013-11-01 22:43
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第8张图片
    ae1160:  这些 小白地基上都有啊,我见过,那上边还有很多的编程和源码,不用求人,自己直接下载好了,都是免费的哦! 搜 小白资源网
    2015-7-6 20:20 回复
  • 我也说一句

     

  • 傻傻_痴痴
  • 吧主
    12
dx,dy又如何去使用呢?
当我们把手指放在屏幕上时,就以我们手指的位置为坐标原点,dx,dy的值都为0。
当我们手指向左滑动,dx值会变为负数,向右滑值为正数,同理可以知道dy。
PS:还是值得注意,dx,dy的值也是小于1的,在-1<0<1直接,不能直接使用int


收起回复
  • 11楼
  • 2013-11-01 22:48
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴:  这里讲错了,向右移动是正数,向左移动是负数,跟我们数学的坐标轴一样
    2013-11-2 00:06 回复
  • 傻傻_痴痴:  回复 傻傻_痴痴 :我肿么了我,没有错到,顿时觉得自己方向感好差。。。
    2013-11-2 00:08 回复
  • 一周休七日:  回复 @傻傻_痴痴 :
    2013-11-3 08:37 回复
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第9张图片
    小牛_牛sky:  dx,dy 怎么获得啊?
    2014-3-22 23:16 回复
  • 傻傻_痴痴:  回复 小牛_牛sky :dx小于零就是向左,大于零就是向右,你可以试试
    2014-3-23 10:38 回复
  • 我也说一句

    还有1条回复,点击查看

  • 傻傻_痴痴
  • 吧主
    12
好了,讲解完毕,接下来我们来写一个程序,把触屏的坐标放到屏幕上,程序运行结果如下图:


回复
  • 12楼
  • 2013-11-01 22:49
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴
  • 吧主
    12
SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第10张图片


收起回复
  • 13楼
  • 2013-11-01 22:51
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴:  傻傻_痴痴:经童鞋反馈此代码导致卡死,请调转到45楼看优化后的代码,此链接失效
    2013-11-15 19:29 回复
  • 我也说一句

     

  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第11张图片
  • 扬舞漫风
  • 大神你好
    5
very good, thanks!


收起回复
  • 14楼
  • 2013-11-01 23:00
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴: 
    2013-11-1 23:13 回复
  • 我也说一句

     

  • 桜にほんご
你造我是哪个动漫里的么?  点击围观 
SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第12张图片
  • 傻傻_痴痴
  • 吧主
    12
#include "SDL2/SDL.h"
#include "SDL2/SDL_ttf.h"
#include
#include

#define W 480
#define H 800

TTF_Font *font = NULL; //定义一个字体
SDL_Color color = { 178, 34, 34 };// 设置字体颜色

void setFont()
{
TTF_Init();// 启动font
font = TTF_OpenFont("/system/fonts/DroidSansFallback.ttf", 50);// 打开系统自带字体并设置大小为30
}

int main(int argc, char *argv[])
{
float x = 0, y = 0;// 用于获取触控位置的坐标
char ch[50];
//用于储存x,y为字符串输出
SDL_Rect image;
//设置一个矩形用于显示surface表面大小,如果不使用image的话图像拉伸得无法想象
image.x = 0;
image.y = 100;
image.h = 150;
image.w = 500;
SDL_Event event; //定义一个事件
SDL_Surface *sur1 = NULL; //定义刷屏表面
SDL_Surface *sur2 = NULL; //定义一个Surface表面用于显示字体
SDL_Window *w = NULL;// 创建一个窗口指针
SDL_Renderer *ren = NULL;// 创建一个渲染器指针
w = SDL_CreateWindow("Touch Test", 0, 0, W, H, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);// 配置窗口参数并创建 
ren = SDL_CreateRenderer(w, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);// 为创建的窗口配置渲染器


回复
  • 15楼
  • 2013-11-01 23:05
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴
  • 吧主
    12
SDL_Texture *tex1 = NULL;
SDL_Texture *tex2 = NULL;//在SDL2.0中得把Surface表面传递给Texture来实现硬件加速,再把图形显示在屏幕上
sur1 = SDL_CreateRGBSurface(0, W, H, 32, 0, 0, 0, 0); //用于画一个矩形来刷屏
SDL_FillRect(sur1, NULL, 0xffacca);
//在sur1上画一个矩形
tex1 = SDL_CreateTextureFromSurface(ren, sur1); //把sur1传递给tex1
setFont();


回复
  • 16楼
  • 2013-11-01 23:06
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴
  • 吧主
    12
while (1)
{
while (SDL_PollEvent(&event))
{
if (event.type == SDL_FINGERDOWN || event.type == SDL_FINGERMOTION)
//当事件为触屏
{
x = event.tfinger.x;
y = event.tfinger.y;
//获取x,y的坐标
}
}
sprintf(ch, "X: %f Y: %f",100*x,100*y); //把坐标位置储存到ch字符串中,这里乘以100为了显示更方便直观
sur2 = TTF_RenderUTF8_Solid(font, ch, color); //让字符串生成surface表面并且传递给sur2
tex2 = SDL_CreateTextureFromSurface(ren, sur2); 
SDL_RenderCopy(ren, tex1, NULL, NULL); //SDL2.0中是使用SDL_RenderCopy直接把Texture复制到窗口,而不是使用SDL_BlitSutface
SDL_RenderCopy(ren, tex2, NULL, &image);
SDL_RenderPresent(ren); //刷新屏幕
}
SDL_DestroyTexture(tex1);
SDL_DestroyTexture(tex2);
//释放Textrue
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(w);
//释放渲染器和窗口并退出
}


回复
  • 17楼
  • 2013-11-01 23:06
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴
  • 吧主
    12
下面是以上程序的源码下载,永久地址
ht哎tp:呀/呀/pan.呀baidu.co呀m/share/link?shareid=呀3841893038&uk=2905224086


收起回复
  • 18楼
  • 2013-11-01 23:11
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴:  经童鞋反馈此代码导致卡死,请调转到45楼看优化后的代码,此链接失效
    2013-11-15 19:28 回复
  • 我也说一句

     

  • 傻傻_痴痴
  • 吧主
    12
快捷地址  http://pan.baidu.com/share/link?shareid=3841893038&uk=2905224086


收起回复
  • 19楼
  • 2013-11-01 23:11
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴:  傻傻_痴痴:经童鞋反馈此代码导致卡死,请调转到45楼看优化后的代码,此链接失效
    2013-11-15 19:28 回复
  • 我也说一句

     

  • 傻傻_痴痴
  • 吧主
    12
教程完毕,有什么不懂的在下面回复我,我可以回答的会尽量回答


回复
  • 20楼
  • 2013-11-01 23:12
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • PanXuesen8
  • 大名鼎鼎
    10
真的很强大 可是为什么当点击屏幕到一定次数之后坐标就会显示不出来了,如果返回,c4droid会关闭??怎么回事呢


收起回复
  • 21楼
  • 2013-11-02 00:15
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴:  你是说我上面的程序吗?没有这种情况的呀?我点了很多次,滑动了很多次也没有问题,点击返回SDL2.0是没有确认选项,直接返回代码
    2013-11-2 00:21 回复
  • 我也说一句

     

  • PanXuesen8
  • 大名鼎鼎
    10
在sdl2.0中能使用sdl的函数吗?


收起回复
  • 23楼
  • 2013-11-02 09:23
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴:  SDL2.0是重新定义的,所有头文件都从写了,与SDL1.2是不一样的,不通用,但有些用法跟SDL1.2还是一样
    2013-11-2 10:53 回复
  • 我也说一句

     

  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第13张图片
  • Fallenworlder
  • 小吧主
    9
其实鼠标事件也可以。我试过了


收起回复
  • 24楼
  • 2013-11-02 09:44
  • 举报 |个人企业举报垃圾信息举报
  • 傻傻_痴痴:  鼠标事件是可以模拟触控,但有很多限制,比如你直接点击屏幕,程序无法直接获取坐标,你需要滑动手指,才可以获取坐标,而且获取的坐标是你上次停留的位置+你现在滑动距离的坐标,而不是你所在的屏幕的坐标。做游戏的时候,会发觉鼠标往往达不到我们要的效果
    2013-11-2 10:57 回复
  • 傻傻_痴痴:  鼠标模拟触屏的坐标只可以通过每次滑动的距离来累积相加,当你一直向右滑动,它的X值加到最大程度就无法再增加,只能通过向左滑动来减小X的值,做游戏时会发现鼠标跟还是有缺陷,往往达不到我们想要的触控效果
    2013-11-2 11:06 回复
  • PanXuesen8:  回复 傻傻_痴痴 :这个我试过了,是真的。。
    2013-11-2 11:08 回复
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第14张图片
    Fallenworlder:  回复 傻傻_痴痴 :我试过的,直接点击就可以获取坐标
    2013-11-2 11:51 回复
  • 傻傻_痴痴:  回复 Fallenworlder :我搞错了,点击也是可以获取,以前也试过用鼠标来实现触控编一个小游戏,但到最后x与y到达最大值就无法再增大了,还遇到了很多问题。还试过来写一个触屏的计算器,问题又来了,就是点了第一次以后,再点第二次,x,y还在那个位置,而不是手指的位置,
    2013-11-2 12:30 回复
  • 我也说一句

    还有1条回复,点击查看

  • 一周休七日
  • 外星人
    9
好帖,顶!


回复
  • 25楼
  • 2013-11-02 09:59
  • 举报 |个人企业举报垃圾信息举报
  • 来自手机贴吧
  • 一周休七日
  • 外星人
    9
有异常?在我的机器上会自动退出,除非不触摸,不然过几秒就会退出…


收起回复
  • 26楼
  • 2013-11-02 10:55
  • 举报 |个人企业举报垃圾信息举报
  • 来自手机贴吧
  • 傻傻_痴痴:  咦?我运行没有这样的情况啊
    2013-11-2 10:59 回复
  • PanXuesen8:  是有这个问题。。
    2013-11-2 11:12 回复
  • PanXuesen8:  回复 傻傻_痴痴 :我运行后不点屏幕一直等一会儿就会出现问题,返回桌面看到手机内存从原来的30%增加到80%
    2013-11-2 11:13 回复
  • PanXuesen8:  回复 傻傻_痴痴 :我运行后,不点击屏幕,一直等待,过了一会儿,屏幕上的字就会消失,而且屏幕会闪,如果返回桌面会看到原先点用30%内存变成了80%左右。。
    2013-11-2 11:17 回复
  • 傻傻_痴痴:  回复 PanXuesen8 :肿么回事。。。我的安全稳定不反弹呀,你们C4版本是多少的呀?
    2013-11-2 11:18 回复
  • 我也说一句

    还有5条回复,点击查看

  • 傻傻_痴痴
  • 吧主
    12
@一周休七日  @PanXuesen8 我明白了,SDL2.0跟SDL1.2的主循环不一样,我没有加上帧速限制,它会CPU的一个核心占用到最大程度,导致内存不足退出,这个问题要值得注意


收起回复
  • 28楼
  • 2013-11-02 11:35
  • 举报 |个人企业举报垃圾信息举报
  • 来自手机贴吧
  • PanXuesen8: 
    2013-11-2 11:39 回复
  • PanXuesen8:  彻底服了目前表示sdl1.2还没学会,sdl2.0实在搞不懂那些函数的作用又找不到教程。。。
    2013-11-2 11:41 回复
  • 傻傻_痴痴:  回复 PanXuesen8 :这个还得在渲染器创建时上加一个延迟刷屏flag,我没有加到,程序就会不停的吸取cpu资源,导致退出了
    2013-11-2 11:42 回复
  • 傻傻_痴痴:  回复 PanXuesen8 :SDL主要是靠硬件渲染的,虽然效率会提高好多,但很吃硬件
    2013-11-2 11:43 回复
  • 傻傻_痴痴:  回复 PanXuesen8 :SDL主要是靠硬件渲染的,虽然效率会提高好多,但很吃硬件
    2013-11-2 11:43 回复
  • 我也说一句

    还有8条回复,点击查看

  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第15张图片
  • 上网吃苹果
  • 孤独求败
    12
mark



   ⣧⡉⢻⣗    别看了,都是符号,你不懂得!


回复
  • 29楼
  • 2013-11-02 11:59
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第16张图片
  • 单调三次元
  • 高手寂寞
    11
好厉害


回复
  • 30楼
  • 2013-11-02 21:46
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第17张图片
  • Riouts
  • 孤独求败
    12
多点触控。。。。可以么 算了。当我没问



      bdhd://——我是一个大水笔,水呀水呀水!要把我的小楼层,水的白又亮~


收起回复
  • 31楼
  • 2013-11-02 23:51
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴:  SDL2.0也支持多点和手势操作,你去了解一下 SDL_DOLLARGESTURE SDL_DOLLARRECORD, SDL_MULTIGESTURE, 这三个是多点与手势操作
    2013-11-3 00:13 回复
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第18张图片
    Riouts:  回复 @傻傻_痴痴 :长姿势了,谢谢~      bdhd://——我是一个大水笔,水呀水呀水!要把我的小楼层,水的白又亮~
    2013-11-3 00:17 回复
  • 我也说一句

     

sdl可以做菜单界面吗?


收起回复
  • 36楼
  • 2013-11-03 23:48
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 一周休七日:  自己画呗,pys60的时候我们就是自己画的…
    2013-11-3 23:56 回复
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第19张图片
    yhobo01:  回复 一周休七日 :SDL是C++语法吗?我只会C...
    2013-11-4 00:08 回复
  • 一周休七日:  回复 @yhobo01 :好像纯c也可以,吧里有纯c的贪食蛇。我没学过…
    2013-11-4 00:12 回复
  • 傻傻_痴痴:  做界面用QT比较适合,QT主要是用C++写的,SDL可以用C,也可以用C++,看你个人喜好
    2013-11-4 17:54 回复
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第20张图片
    yhobo01:  回复 傻傻_痴痴 :
       8"  
    2013-11-5 19:07 回复
  • 我也说一句

    还有3条回复,点击查看

  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第21张图片
  • yhobo01
  • 大名鼎鼎
    10
已保存


回复
  • 37楼
  • 2013-11-03 23:50
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第22张图片
  • C200KNL
  • 外星人
    9
顶一个,哈哈


收起回复
  • 38楼
  • 2013-11-04 18:18
  • 举报 |个人企业举报垃圾信息举报
  • 傻傻_痴痴: 
    2013-11-5 11:20 回复
  • 我也说一句

     

  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第23张图片
  • qw3752258
  • 孤独求败
    12
每发必精啊


回复
  • 39楼
  • 2013-11-06 16:25
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第24张图片
  • 唾沫淹死鱼丶
  • 高手寂寞
    11
默默潜水很久了 但是看到你的帖子还是忍不住要顶下 




    ------这个城市哪里都是你,可是你在哪里。~


回复
  • 40楼
  • 2013-11-06 17:56
  • 举报 |个人企业举报垃圾信息举报
  • 热动高手
  • 大神你好
    5
请教一下我写的程序怎么打不开文件?安卓文件绝对路径怎么表示?


收起回复
  • 41楼
  • 2013-11-06 19:36
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴:  比如有一个bmp的名字为hello.bmp放在SD卡根目录,使用绝对路径得这样打开"/sdcard/hello.bmp"或者"/mnt/sdcard/hello.bmp",得从SD卡开始,而在1.2使用相对路径不必去声明SD卡路径,直接可以从程序源码的当前文件夹开始
    2013-11-6 21:05 回复
  • 我也说一句

     

  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第25张图片
  • thsywy
  • 外星人
    9


回复
  • 42楼
  • 2013-11-08 21:53
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第26张图片
  • yhobo01
  • 大名鼎鼎
    10
想问, 这个能不能和C一起用?
我的意思是把sdl的函数作为main()里调用的函数


收起回复
  • 43楼
  • 2013-11-13 12:29
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴:  SDL本来就是用C/C++写的
    2013-11-15 19:31 回复
  • 我也说一句

     

  • 傻傻_痴痴
  • 吧主
    12
经童鞋们反馈以上代码会把内存占满导致卡死,下面是优化后的代码


回复
  • 44楼
  • 2013-11-15 19:22
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 女神联盟2
美丽又能干的女神,操作性极强!  老公半夜还在玩游戏,拿过来一看竟是···· 
  • 傻傻_痴痴
  • 吧主
    12
#include "SDL2/SDL.h"
#include "SDL2/SDL_ttf.h"
#include "SDL2/SDL_thread.h"
#include
#include

#define W 480
#define H 800

TTF_Font *font = NULL; //定义一个字体
SDL_Color color = { 178, 34, 34 };// 设置字体颜色

float x = 0, y = 0;// 用于获取触控位置的坐标
char ch[10];
//用于储存x,y为字符串输出
SDL_Thread*th=NULL;
SDL_Event event; //定义一个事件
SDL_Surface *sur1 = NULL; //定义刷屏表面
SDL_Surface *sur2 = NULL; //定义一个Surface表面用于显示字体
SDL_Window *w = NULL;// 创建一个窗口指针
SDL_Renderer *ren = NULL;// 创建一个渲染器指针
SDL_Texture *tex1 = NULL;
SDL_Texture *tex2 = NULL;//在SDL2.0中得把Surface表面传递给Texture来实现硬件加速,再把图形显示在屏幕上
SDL_Rect image;
//设置一个矩形用于显示surface表面大小,如果不使用image的话图像拉伸得无法想象
void setFont()
{
TTF_Init();// 启动font
font = TTF_OpenFont("/system/fonts/DroidSansFallback.ttf", 50);// 打开系统自带字体并设置大小为50
}

int getTouch(void*data)
{
while (1)
{
while (SDL_PollEvent(&event))
{
if (event.type == SDL_FINGERDOWN || event.type == SDL_FINGERMOTION)
//当事件为触屏


回复
  • 45楼
  • 2013-11-15 19:22
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴
  • 吧主
    12
{
x = event.tfinger.x;
y = event.tfinger.y;
//获取x,y的坐标
}
}
}
}

int main(int argc, char *argv[])
{
bool q=false;
image.x = 0;
image.y = 100;
image.h = 150;
image.w = 500;
w = SDL_CreateWindow("Touch Test",0,0,W,H,SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE|SDL_WINDOW_BORDERLESS);// 配置窗口参数并创建 
ren = SDL_CreateRenderer(w, -1, SDL_RENDERER_PRESENTVSYNC);// 为创建的窗口配置渲染器
sur1 = SDL_CreateRGBSurface(0, W, H, 32, 0, 0, 0, 0); //用于画一个矩形来刷屏
SDL_FillRect(sur1, NULL, 0xffacca);
//在sur1上画一个矩形
tex1 = SDL_CreateTextureFromSurface(ren, sur1); //把sur1传递给tex1
setFont();
th=SDL_CreateThread(getTouch,NULL,NULL);


回复
  • 46楼
  • 2013-11-15 19:23
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴
  • 吧主
    12
while (q==false )
{
SDL_RenderClear(ren);
sprintf(ch, "X: %f Y: %f",100*x,100*y); //把坐标位置储存到ch字符串中,这里乘以100为了显示更方便直观
sur2=TTF_RenderUTF8_Blended(font,ch,color); //让字符串生成surface表面并且传递给sur2
tex2 = SDL_CreateTextureFromSurface(ren, sur2);
SDL_FreeSurface(sur2);
SDL_RenderCopy(ren, tex1, NULL, NULL); //SDL2.0中是使用SDL_RenderCopy直接把Texture复制到窗口,而不是使用SDL_BlitSutface
SDL_RenderCopy(ren, tex2, NULL, &image); 
//刷新屏幕
SDL_DestroyTexture(tex2);
SDL_RenderPresent(ren);
}
SDL_DestroyTexture(tex1);
SDL_DestroyTexture(tex2);
//释放Textrue
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(w);
//释放渲染器和窗口并退出
}


回复
  • 47楼
  • 2013-11-15 19:23
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴
  • 吧主
    12
http://pan.baidu.com/share/link?shareid=3202444669&uk=2905224086


回复
  • 48楼
  • 2013-11-15 19:25
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • 傻傻_痴痴
  • 吧主
    12
优化后永久地址下载
ht别tp:/删/pan掉.bai啊du.co啊m/sh啊are/link?sharei啊d=3202444669&uk=2905224086啊


回复
  • 49楼
  • 2013-11-15 19:26
  • 举报 |个人企业举报垃圾信息举报
  • 来自Android客户端
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第27张图片
  • 请疼爱JE丶
  • 求知欲
    4
先支持个,到学校再编写,家里还是写Direct3D好玩.(带着笔记本去学校不方便)


收起回复
  • 50楼
  • 2013-11-27 13:39
  • 举报 |个人企业举报垃圾信息举报
  • 傻傻_痴痴:  Direct3D当然好,主要可移植性低
    2013-11-27 19:19 回复
  • SDL2.0实现触控方法,让屏幕跟随你的手指动起来_第28张图片
    请疼爱JE丶:  回复 傻傻_痴痴 :是的,D3D效率很好。不过现在我居然被用C++类类写SDL成像难住了。。


你可能感兴趣的:(SDL2)