手势操作的Snake游戏_拿来主义迅速上手
来源:互联网 发布:iphone软件是英文 编辑:程序博客网 时间:2024/06/02 11:47
手势操作的Snake游戏_拿来主义迅速上手
本文是snake on a phone 贪吃蛇游戏的项目解析系列文章,基于google sample code 改编而成,项目地址 https://github.com/lonely917/snake-on-a-phone-fling-version
内容持续更新,接上一篇文章Snake on a phone——Android开源项目实战,贪吃蛇游戏
SnakeView是游戏主题视图,包括对Dpad按键类型事件的监听,我们尝试为其添加手势监听器。前面的文章已经讲到SnakeView的onKeyDown中对方向键事件监听,然后执行逻辑,由于手机没有方向键也就不会产生对应事件,我们在手势监测中判断出滑动方向后主动触发或者说模拟一次按键操作即可实现游戏的正常运行,至于游戏细节我们待游戏跑出来后再去分析或者更改。首先让SnakeView实现OnGestureListener
public class SnakeView extends TileView implements OnGestureListener
要实现接口的一些方法,我们的主要控制逻辑写在onFling中
onDownonFlingonScroll.....
在onFling中判断滑动的方向,并模拟按键操作。其中limit是一个阈值,滑动举例超过这个才被认为是一次操作,我这里设定了100。
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Log.d("DETECTOR", "onfling: "+e1.toString()); Log.d("DETECTOR", "onfling: "+e2.toString()); Log.d("DETECTOR", "onfling: "+"x speed->"+velocityX+";y speed->"+velocityY); int x_move = (int) (e2.getX()-e1.getX()); int y_move = (int) (e2.getY()-e1.getY()); //阈值 int limit = 100; if(x_move > limit) { //向右滑动 onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null); } else if(x_move < limit*(-1)) { //向左滑动 onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null); } else if(y_move > limit) { //向下滑动 注意坐标方向不同于我们熟悉的数学坐标轴方向 onKeyDown(KeyEvent.KEYCODE_DPAD_DOWN, null); } else if(y_move < limit *(-1)) { //向上滑动 onKeyDown(KeyEvent.KEYCODE_DPAD_UP, null); } return false;}
监听内容写完我们还没有将此监听器和我们的View关联起来,以下是定义和初始化部分,
//定义手势监测private GestureDetector gestureDetector; private void initSnakeView() { setFocusable(true); Resources r = this.getContext().getResources(); resetTiles(4); loadTile(RED_STAR, r.getDrawable(R.drawable.redstar)); loadTile(YELLOW_STAR, r.getDrawable(R.drawable.yellowstar)); loadTile(GREEN_STAR, r.getDrawable(R.drawable.greenstar)); //初始化gestureDetector gestureDetector = new GestureDetector(getContext(), this);}
initSnakeView的其他部分我们暂时不需要关心,使得手势操作生效还需要在onTouchEvent中将事件交给gestureDetector
public boolean onTouchEvent(MotionEvent event) { //在这里关联手势操作 gestureDetector.onTouchEvent(event); //比较重要的一点,对于按下操作ActionDown一定要返回true,否则接收不到后续move 和 up的事件 if(event.getAction() == MotionEvent.ACTION_DOWN) return true; return super.onTouchEvent(event);}
这里有个很重要的地方就是需要对ACTION_DOWN事件进行处理,返回true,表示自按下事件后的后续操作我都来接管,否则的话这个onTouchEvent只能接触到一ActionDowm事件,后续的move和up都不会收到,全都交给viewgroup处理的。于是运行游戏,我们可以通过滑动来进行操作了。
至此我们的游戏改装完成,后续我们对SnakeView的逻辑细节进行剖析。
- 手势操作的Snake游戏_拿来主义迅速上手
- 手势操作的Snake游戏_游戏逻辑分析
- 手势操作的Snake游戏_游戏视图分析之TileView
- 手势操作的Snake游戏_游戏视图分析之SnakeView
- 关于迅速上手Pychart的简单介绍
- 我的第一个游戏—SNAKE
- 迅速上手LaTeX
- Mantle迅速上手
- 04 设计支持手势操作的 XNA 游戏
- 迅速上手,能随便跑起来的OpenTLD
- Snake游戏深入解析
- Snake游戏深入解析
- Snake 游戏深入解析
- cocoscreator--snake游戏总结
- vi编輯器的操作-拿来主义:网上找…
- yum安装mysql,迅速上手
- 操作手势的实现
- 简单的手势操作
- SQL语句实例
- 数组结构体实现稀疏矩阵转置 (sdut oj 3347)
- 四种常见的 POST 提交数据方式
- MFC调试过程中Debug的调用
- android工程中把数据保存到文件中的class
- 手势操作的Snake游戏_拿来主义迅速上手
- Log4j使用教程
- Android Studio For Mac 配置
- Java 接口参数,接口回调.
- tjut 4679
- PHP学习中遇到的错误之Notice: Undefined offset: 4
- 搜索引擎(三)-- 搜索器
- kernel debug
- 动态添加和移除元素