贪吃蛇用滑动控制方向

在android SDK 自带的sample snake,只能通过上下左右方向键控制贪吃蛇的方向,

模拟器上玩没有问题,装到手机后基本玩不了,本着自己丰衣足食的精神,做了点小小的改动,

通过手机屏滑动来控制方向,

主要涉及的类public GestureDetector (GestureDetector.OnGestureListener listener),是一个触摸手势识别类,

在绑定的监听器listener需要实现GestureDetector.OnGestureListener接口中的一些方法,这里我们主要是实现

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY)方法

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
Log.d("TAG", "onFling");
System.out.println("onFling");
if(Math.abs(e1.getY()-e2.getY())>Math.abs(e1.getX()-e2.getX()))//取绝对值来判断是水平滑动还是垂直滑动
{
if(e1.getY()>e2.getY())
{
System.out.println("up");
mSnakeView.onKeyDown(KeyEvent.KEYCODE_DPAD_UP, null);
}
else
{
System.out.println("down");
mSnakeView.onKeyDown(KeyEvent.KEYCODE_DPAD_DOWN, null);
}

}
else
{
if(e1.getX()>e2.getX())
{
System.out.println("lef");
mSnakeView.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null);
}
else if(e1.getX()<e2.getX())
{
System.out.println("right");
mSnakeView.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
}
}


return false;
}

其次我们要在在mSnakeView上添加一个OnTouchListener监听器,即mSnakeView.setOnTouchListener(OnTouchListener l)

要实现OnTouchListener接口中的

public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return gesturedetector.onTouchEvent(event);

}

完成以上后基本的工作就完成了,软件安装到手机后,还是无法识别滑动手势,很是苦恼,后发现少了点东西,

 mSnakeView.setLongClickable(true);

这个一定得加上,不然不会调用onFling这个方法



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章