读书频道 > 网站 > 网页设计 > 想到做到:Android开发关键技术与精彩案例
9.1.5 输入处理
12-08-06    叶孤城
收藏    我要投稿   
这不是一本只讲android开发技术的图书,本书让开发者站在移动互联产业链条上思考自己该怎么做本书按照入门篇、进阶篇和游戏篇三大部分,结合37个案例系统全面地介绍Android应用和游戏开发的知识。结合实践和设计模...立即去当当网订购
由于当前的Android模拟器是全触摸屏模式,因此需要处理onTouchEvent()方法来响应用户的手势输入。在游戏的运行过程中,需要区分用户的向上滑动(代表暂停或者启动游戏)、向下滑动(方块快速落下)、向左滑动和向右滑动事件。除此之外,还需要区分用户的点击屏幕动作(方块变形)。为了区分用户的手势移动方向,需要使用VelocityTracker类。每次onTouchEvent()方法被调用时,参数传入的MotionEvent对象都被加入到VelocityTracker对象中。当MotionEvent.ACTION_UP事件传入时开始计算移动的速度和方向。由于VelocityTracker的getXVelocity()和getYVelocity()方法返回的是带符号的速度,因此可以根据速度的正负值判断用户手势的方向。对于在MotionEvent.ACTION_DOWN和MotionEvent. ACTION_UP之间产生移动距离较小的手势,则认为是点击屏幕的事件,方块需要变换形状。onTouchEvent()代码如下所示:
@Override
public boolean onTouchEvent(MotionEvent event) {
 if (tracker == null)
  tracker = VelocityTracker.obtain();
 //将event加入到tracker中以便计算
 tracker.addMovement(event);
 int action = event.getAction();
 switch (action) {
 //ACTION_DOWN时记录clickX和clickY的值
 case MotionEvent.ACTION_DOWN:
  clickX = (int) event.getX();
  clickY = (int) event.getY();
  break;
 //ACTION_UP,开始计算
 case MotionEvent.ACTION_UP:
  tracker.computeCurrentVelocity(1000);
  //获得y轴方向的速度
  float vy = tracker.getYVelocity();
  //获得x轴方向的速度
  float vx = tracker.getXVelocity();
  //最新的x,y坐标
  int x = (int) event.getX();
  int y = (int) event.getY();
  if (Math.abs(vy) > ViewConfiguration.getMinimumFlingVelocity()
    & vy < 0 & Math.abs(y - clickY) > UP_LIMIT) {
   //根据上述条件判断为向上滑动
   if (state == READY) {
    start();
   } else {
    pause(false);
   }
   tracker.recycle();
   break;
  }
  //游戏正在运行中
  if (state == RUNNING) {
   if (Math.abs(x - clickX) < CLICK
     & Math.abs(y - clickY) <= CLICK) {
    //判断为屏幕点击动作,变换方块形状
    next();
    tracker.recycle();
    break;
   }
   if (Math.abs(vy) > ViewConfiguration.getMinimumFlingVelocity()
     & y - clickY > UP_LIMIT & Math.abs(vy) > Math.abs(vx)) {
    //判断为下滑动作,让方块直接落下
    fall();
    tracker.recycle();
    break;
   }
   if (Math.abs(vx) > Math.abs(vy)) {
    //判断为左右移动动作
    if (vx > 0)
     right();
    else
     left();
   }
  }
  tracker.recycle();
  break;
 default:
  break;
 }
 return true;
}
点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站