之前写了很多自定义View理论方面的文章,具体可以参见《Android中自定义View、ViewGroup理论基础详解》 。 理论指导实践,本博文演示了如何通过自定义View实现微信打飞机游戏。

全部源码已经开源到GitHub,如果觉得不错,欢迎大家Star和Fork!

GitHub: https://github.com/iSpring/GamePlane/


游戏说明

  1. 飞机一直发射子弹,用手指滑动可以改变飞机的位置
  2. 不同的敌机抗击打能力不同,当敌机被击中一定子弹数量时会爆炸,爆炸有动画效果
  3. 每隔一段时间都会有双发子弹或炸弹等道具奖励
  4. 获得双发子弹之后,子弹变为双发
  5. 获得炸弹道具之后,可以通过双击将屏幕内的所有敌机炸毁


实现

  • 我们定义了Sprite类,即精灵类,游戏中的飞机、子弹、奖励道具等都是继承自该类,我们通过moveTo()、move()等方法控制精灵的位置,通过beforeDraw()、onDraw()、afterDraw()实现相应的绘图逻辑。精灵类及其子类继承如下所示:

  • GameView是我们自定义的View类,主要重写了onDraw()onTouchEvent()方法。onDraw()源码如下所示:

    @Override
    protected void onDraw(Canvas canvas) {//我们在每一帧都检测是否满足延迟触发单击事件的条件if(isSingleClick()){onSingleClick(touchX, touchY);}super.onDraw(canvas);if(status == STATUS_GAME_STARTED){drawGameStarted(canvas);}else if(status == STATUS_GAME_PAUSED){drawGamePaused(canvas);}else if(status == STATUS_GAME_OVER){drawGameOver(canvas);}
    }

    在某一时刻GameView有三种状态:游戏开始STATUS_GAME_STARTED、游戏暂停STATUS_GAME_PAUSED和游戏结束STATUS_GAME_OVER。在不同的状态下我们会调用不同的绘制方法,这几个方法中都会调用方法postInvalidate(),这样驱动着View不断重绘,进而不断调用onDraw()方法实现游戏的动态效果。关于绘图技巧,可以参见另一篇博文《Android中Canvas绘图基础详解(附源码下载)》。

  • 我们也重写了GameView的onTouchEvent()方法。由于View只支持单击事件,而不支持双击事件,所以我们自己定义了一个resolveTouchType()方法,通过这个方法可以合成我们自己想要的事件类型,比如双击事件。我们记录MotionEvent.ACTION_DOWNMotionEvent.ACTION_UP的时间,一次单击事件由ACTION_DOWN和ACTION_UP两个事件合成,假设从ACTION_DOWN到ACTION_UP间隔小于200毫秒,我们就认为发生了一次单击事件。一次双击事件由两个点击事件合成,两个单击事件之间小于300毫秒,我们就认为发生了一次双击事件。在触发了双击事件的时候,我们就会触发炸弹,将屏幕内的敌机都炸毁。当处于ACTION_MOVE状态时,我们就通过event.getX()event.getY()改变战斗机的位置。关于MotionEvent的详细信息可以参另一篇博文《Android中TouchEvent触摸事件机制》。

  • 我们还为GameView提供了start()、pause()、resume()和destroy()等方法,使其具备类似于Activity的生命周期,方便在Activity中对GameView进行状态管理。

  • 小敌机类,体积小,抗打击能力低;中敌机类,体积中等,抗打击能力中等;大敌机类,体积大,抗打击能力强。当敌机销毁的时候,我们使用了爆炸效果,使用了如下的图片:

    这张图片演示了爆炸从开始到结束14个阶段的效果图,我们用两帧绘制爆炸的一个阶段,这样完整绘制一个爆炸效果需要28帧,在绘制完最后一个阶段之后,Explosion类会销毁自己。

全部源码已经开源到GitHub,如果觉得不错,欢迎大家Star和Fork!

GitHub: https://github.com/iSpring/GamePlane/

[GitHub开源]Android自定义View实现微信打飞机游戏相关推荐

  1. android旋转不重绘,Android自定义view仿微信刷新旋转小风车

    本文实例为大家分享了Android仿微信刷新旋转小风车 具体代码,供大家参考,具体内容如下 不太会录像,没办法,智能截图了 不多说了,直接上代码 package com.shipneg.demoysp ...

  2. Android 自定义View 仿微信好友,字母排序

    一 :具体说下思路(注意:一下代码如果没有显示则访问     https://www.jianshu.com/p/2da89b56871f   ) 1 :整体用到的控件,list view(recyc ...

  3. android 自定义view实现推箱子小游戏。

    自定义view: package com.jisai.materialdesigndemo.tuixiangzhi;import android.content.Context; import and ...

  4. 推箱子android源代码,android自定义view实现推箱子小游戏

    本文实例为大家分享了android推箱子游戏的具体实现代码,供大家参考,具体内容如下 自定义view: package com.jisai.materialdesigndemo.tuixiangzhi ...

  5. Android 自定义View实现炮弹射击小游戏

    先看效果图: 这是一个比较简易的射击小游戏,后期可以将圆球,炮筒用其它图片来替换,应该可以变得好看一些.我实现这个效果,主要是为了学习和巩固自定义View的一些知识点.下面我来讲述一下本游戏的设计思路 ...

  6. 学不动了,尝试用Android Jetpack Compose重写微信经典飞机大战游戏

    前段时间看了TechMerger大佬写的<一气呵成:用Compose完美复刻Flappy Bird!>,甚是有趣,按耐不住那躁动的心,笔者决定跟随大佬的脚步通过写游戏的方式学习Jetpac ...

  7. Android自定义View分享——仿微信朋友圈图片合并效果

    写在前面 笔者近来在学习Android自定义View,收集了一些不算复杂但又"长得"还可以的自定义View效果实现,之前分享过两个效果:一个水平的进度条,一个圆形温度显示器,如果你 ...

  8. Android自定义View进阶-MotionEvent详解

    欢迎Follow我的GitHub, 关注我的CSDN. 其余参考Android目录 我们微信公众号:杨守乐 推荐文章: 如果你喜欢上了一个程序员小伙,献给所有的程序员女友 学习资料(干货汇集)不断更新 ...

  9. android自定义曲线控件,Android自定义view进阶-- 神奇的贝塞尔曲线

    上一篇介绍了自定义view需要知道的基本函数.新开一篇献给借给我vpn的深圳_奋斗小哥. 转载请注明出处:http://blog.csdn.net/wingichoy/article/details/ ...

最新文章

  1. Javascript 拖拽的一些高级的应用——逐行分析代码,让你轻松了解拖拽的原理...
  2. python模块导入
  3. binlog日志的三种模式
  4. ajax的核心有哪些,ajax的核心
  5. 深度剖析 | 阿里热修复如何精简优化补丁资源?
  6. ajax post传输到后台为空?【解决方案】
  7. python维度扩展_在TensorFlow中实现矩阵维度扩展
  8. java中的 FileWriter类 和 FileReader类的一些基本用法
  9. 3年了,我依旧单身,而微信小程序已经普及了
  10. python 下标 遍历列表_Python中遍历列表中元素的操作
  11. 顶隙计算公式_齿轮参数计算公式
  12. java学习第123天,p750-761(05/23)干得漂亮
  13. 为什么说甲骨文裁员也属无奈之举?
  14. JSP页面只显示源代码不显示网页内容
  15. 证券投资基金和股票、债券的区别和联系
  16. 【学习总结】H2数据库
  17. webstorm如何自动修复prettier提示的错误
  18. 申请https域名,证书和部署流程(免费SSL证书)
  19. 意外发现一款很好用的开源BI工具——DataEase
  20. JSP第四篇【EL表达式介绍、获取各类数据、11个内置对象、执行运算、回显数据、自定义函数、fn方法库】(修订版)...

热门文章

  1. 数据在计算机中是如何存储的
  2. cdoj 1334 郭大侠与Rabi-Ribi Label:贪心+数据结构
  3. win10开机蓝屏_2月22日win7大面积蓝屏报错0X000000F4
  4. 西北工业大学计算机学院人才特区,我校举行人才特区“计算科学研究中心”揭牌仪式...
  5. 方正PC迅速崛起 联想地位面临威胁
  6. 最简单的阿拉伯数字转大写(财务专用)存储过程实现
  7. Python网络爬虫爬取新浪新闻
  8. excel怎么能把某一列内容的转变成横向
  9. 合伙人协议还可以开源,开眼了!
  10. Termux安卓高级终端设置