关于SDL多指触屏事件获取各手指状态的问题。

转自 :http://tieba.baidu.com/p/4251800066
我不会告诉你们
我到现在还没解决
while(SDL_PollEvent(&event))
{
if(event.type==SDL_FINGERDOWN||
event.type==SDL_FINGERUP||
event.type==SDL_FINGERMOTION
)
{
//各手指状态
if(event.type==SDL_FINGERDOWN)
EVE_pos[event.tfinger.fingerId].state=1;
if(event.type==SDL_FINGERUP)
EVE_pos[event.tfinger.fingerId].state=3;
if(event.type==SDL_FINGERMOTION)
EVE_pos[event.tfinger.fingerId].state=2;
//各手指坐标
EVE_pos[event.tfinger.fingerId].x= event.tfinger.x*S_w;
EVE_pos[event.tfinger.fingerId].y = event.tfinger.y*S_h;
EVE_pos[event.tfinger.fingerId].id = event.tfinger.fingerId;
}
}


这种方法是不能获取各手指状态的


唉,我不知道你是要多少个手指 ,在很久以前我写的个游戏框架,里面就涉及到屏幕缩放,需要两手指,不过我用的另外的方法 SDL_MultiGestureEvent,实现了缩放已经够了,现在我写了游戏引擎,很多方面比以前那个游戏框架都强太多了,不过我还没有发布,刚好遇到这个问题,我游戏里面涉及到拖动物体,这时候不允许另外的手指干涉,就得用到fingerId,这次我试了下 SDL_TouchFingerEvent中的fingerId,好像不是你那么用的


好吧,我说了一堆废话,请无视,你这个用法没错,是不是你之后调用的问题呢,注意不同先后顺序id会发生变化什么的,强制转换等等什么的,反正我这样试了没什么问题


收起回复
  • 3楼
  • 2016-01-07 06:35
    • 简单aaaaaaa这样是可以获取各手指的坐标,但是各手指的按下状态是获取不了的。比如有一个手指是滑动状态,其他手机全都变成滑动状态了。
      2016-1-7 07:07 回复
    • 一周休七日回复 @简单aaaaaaa :你手指的问题!你单指能保持住“按下”状态两秒算你厉害!
      2016-1-7 12:46 回复
    • 雷神lyc回复 简单aaaaaaa :可以获取各手指状态的,这个过程非常快,我觉得你需要吧那个瞬间状态给储存起来以后判断使用,而且按下基本上都会有微小滑动的
      2016-1-7 13:52 回复
    • 我也说一句

       

    SDL_TouchID device=SDL_GetTouchDevice(0);
    for(int i=0;i<SDL_GetNumTouchFingers(device);++i)
    {
    SDL_Finger *finger = SDL_GetTouchFinger(device,i);
    if(finger!=NULL)
    {
    multipos[i][0]=finger->x;
    multipos[i][1]=finger->y;
    }
    }

    Google


    收起回复
    • 6楼
    • 2016-01-08 06:43
      我建议你去搜一下思必达学院,里面有全套的编程和开放源码,有最新的兄弟连和传智视频教程, 搜 思必达学院


      收起回复
      • 8楼
      • 2016-01-10 07:19
        • 5646789798798l自己学习,搜思必达学院,简单易学,一周让你不比话几千块钱找人做网站了。因为你自己就能用很短的时间做个漂亮完美的网站出来。百度搜索 思必达学院
          2016-1-11 03:44 回复
        • 我自己188思必达学院根据学生学习曲线,设计课程难易度曲线,并强调难点问题,力求最佳的学习效果,让你学习起来更容易,思必达学院工作人员一直坚持不懈的努力获得更好的编程和资源,免费视频让你任性下载!
          2016-1-21 20:13 回复
        • yxs_0131想要经典教程源码视频就来思必达学院,搜 思必达学院 来了不后悔
          2016-1-22 16:16 回复
        • 茶留呈依史上最全编程全部是高清晰的视屏加配套素材 需要的去搜 思必达学院
          2016-1-23 10:11 回复
        • 阳光的菲利亚这个教程资源现在在思必达学院有全套高清的,可以免费下载而且是百度网盘的资源可以一键转存,百度搜索思必达学院
          2016-1-24 10:37 回复
        • 我也说一句

           

        听说来玩的都领了T豆!  贴吧用户专享福利,你领了么? 
        收起回复
        • 9楼
        • 2016-01-11 07:12
          先取FingerId 再判断event.type


          event.type不是手指按下fingerdown,这个event应该是multigesture。

          if (event.type == SDL_MULTIGESTURE)
          // 多指触屏事件
          {
          x = event.mgesture.x;
          y = event.mgesture.y;
          dg += event.mgesture.dTheta * 90;
          // 旋转角度,值很小(*90后手感正常),而且dTheta只是每次的值,所以要累加起来
          dd += event.mgesture.dDist * 10;
          }



             ——水木逸清华,婉兮笙清扬。


          收起回复
          • 13楼
          • 2016-01-24 22:17
            while (SDL_Event(&e)){} 这个循环意思就是从事件队列一个一个抽取事件再判断,一直到抽完为止 你的每一个手指的按下都会依次储存进事件队列,所以若想要判断不同手指的DOWN UP MOVEMENT状态,要先判断fingerId 比如你用两根手指按在屏幕上, 两次循环会获得不同fingerid 所对应的触摸状态,坐标之类的也不同


            收起回复
            • 14楼
            • 2016-01-25 18:38
              SDL_Point a,b;
              while (SDL_PollEvent(&e))
              {
              if (e.type==SDL_FINGERUP || e.type==SDL_FINGERDOWN || e.typez=SDL_FINGERMOTION)
              {
              if (e.tfinger.fingerID==0)
              {
              if (e.type==SDL_FINGERDOWN)
              {
              a.x=e.tfinger.x;
              a.y=e.tfinger.y;
              }
              }
              else if (e.tfinger.fingerID==1)
              {
              if (e.type==SDL_FINGERDOWN)
              {
              b.x=e.tfinger.x;
              b.y=e.tfinger.y
              }
              }
              }
              }

              评论 1
              添加红包

              请填写红包祝福语或标题

              红包个数最小为10个

              红包金额最低5元

              当前余额3.43前往充值 >
              需支付:10.00
              成就一亿技术人!
              领取后你会自动成为博主和红包主的粉丝 规则
              hope_wisdom
              发出的红包
              实付
              使用余额支付
              点击重新获取
              扫码支付
              钱包余额 0

              抵扣说明:

              1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
              2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

              余额充值