[GitHub开源]Android自定义View实现微信打飞机游戏
之前写了很多自定义View理论方面的文章,具体可以参见《Android中自定义View、ViewGroup理论基础详解》 。 理论指导实践,本博文演示了如何通过自定义View实现微信打飞机游戏。
全部源码已经开源到GitHub,如果觉得不错,欢迎大家Star和Fork!
GitHub: https://github.com/iSpring/GamePlane/
游戏说明
- 飞机一直发射子弹,用手指滑动可以改变飞机的位置
- 不同的敌机抗击打能力不同,当敌机被击中一定子弹数量时会爆炸,爆炸有动画效果
- 每隔一段时间都会有双发子弹或炸弹等道具奖励
- 获得双发子弹之后,子弹变为双发
获得炸弹道具之后,可以通过双击将屏幕内的所有敌机炸毁
实现
我们定义了
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_DOWN
和MotionEvent.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实现微信打飞机游戏相关推荐
- android旋转不重绘,Android自定义view仿微信刷新旋转小风车
本文实例为大家分享了Android仿微信刷新旋转小风车 具体代码,供大家参考,具体内容如下 不太会录像,没办法,智能截图了 不多说了,直接上代码 package com.shipneg.demoysp ...
- Android 自定义View 仿微信好友,字母排序
一 :具体说下思路(注意:一下代码如果没有显示则访问 https://www.jianshu.com/p/2da89b56871f ) 1 :整体用到的控件,list view(recyc ...
- android 自定义view实现推箱子小游戏。
自定义view: package com.jisai.materialdesigndemo.tuixiangzhi;import android.content.Context; import and ...
- 推箱子android源代码,android自定义view实现推箱子小游戏
本文实例为大家分享了android推箱子游戏的具体实现代码,供大家参考,具体内容如下 自定义view: package com.jisai.materialdesigndemo.tuixiangzhi ...
- Android 自定义View实现炮弹射击小游戏
先看效果图: 这是一个比较简易的射击小游戏,后期可以将圆球,炮筒用其它图片来替换,应该可以变得好看一些.我实现这个效果,主要是为了学习和巩固自定义View的一些知识点.下面我来讲述一下本游戏的设计思路 ...
- 学不动了,尝试用Android Jetpack Compose重写微信经典飞机大战游戏
前段时间看了TechMerger大佬写的<一气呵成:用Compose完美复刻Flappy Bird!>,甚是有趣,按耐不住那躁动的心,笔者决定跟随大佬的脚步通过写游戏的方式学习Jetpac ...
- Android自定义View分享——仿微信朋友圈图片合并效果
写在前面 笔者近来在学习Android自定义View,收集了一些不算复杂但又"长得"还可以的自定义View效果实现,之前分享过两个效果:一个水平的进度条,一个圆形温度显示器,如果你 ...
- Android自定义View进阶-MotionEvent详解
欢迎Follow我的GitHub, 关注我的CSDN. 其余参考Android目录 我们微信公众号:杨守乐 推荐文章: 如果你喜欢上了一个程序员小伙,献给所有的程序员女友 学习资料(干货汇集)不断更新 ...
- android自定义曲线控件,Android自定义view进阶-- 神奇的贝塞尔曲线
上一篇介绍了自定义view需要知道的基本函数.新开一篇献给借给我vpn的深圳_奋斗小哥. 转载请注明出处:http://blog.csdn.net/wingichoy/article/details/ ...
最新文章
- Javascript 拖拽的一些高级的应用——逐行分析代码,让你轻松了解拖拽的原理...
- python模块导入
- binlog日志的三种模式
- ajax的核心有哪些,ajax的核心
- 深度剖析 | 阿里热修复如何精简优化补丁资源?
- ajax post传输到后台为空?【解决方案】
- python维度扩展_在TensorFlow中实现矩阵维度扩展
- java中的 FileWriter类 和 FileReader类的一些基本用法
- 3年了,我依旧单身,而微信小程序已经普及了
- python 下标 遍历列表_Python中遍历列表中元素的操作
- 顶隙计算公式_齿轮参数计算公式
- java学习第123天,p750-761(05/23)干得漂亮
- 为什么说甲骨文裁员也属无奈之举?
- JSP页面只显示源代码不显示网页内容
- 证券投资基金和股票、债券的区别和联系
- 【学习总结】H2数据库
- webstorm如何自动修复prettier提示的错误
- 申请https域名,证书和部署流程(免费SSL证书)
- 意外发现一款很好用的开源BI工具——DataEase
- JSP第四篇【EL表达式介绍、获取各类数据、11个内置对象、执行运算、回显数据、自定义函数、fn方法库】(修订版)...
热门文章
- 数据在计算机中是如何存储的
- cdoj 1334 郭大侠与Rabi-Ribi Label:贪心+数据结构
- win10开机蓝屏_2月22日win7大面积蓝屏报错0X000000F4
- 西北工业大学计算机学院人才特区,我校举行人才特区“计算科学研究中心”揭牌仪式...
- 方正PC迅速崛起 联想地位面临威胁
- 最简单的阿拉伯数字转大写(财务专用)存储过程实现
- Python网络爬虫爬取新浪新闻
- excel怎么能把某一列内容的转变成横向
- 合伙人协议还可以开源,开眼了!
- Termux安卓高级终端设置