Android实现汤姆猫小游戏

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 chaodev 即可关注。

相信好多人都玩过汤姆猫这个小游戏,要做这个小游戏其实也不难,这不,现写一个,先看效果演示。
tom.gif

目前实现的主要功能点包括以下两部分:

  • 戳 tom 的各个身体部位它会做出相应反馈,包括动作和声音。
  • 往右滑动屏幕的时候另外一只黄色的小狗跳出来搞怪,并发出怪声。

鉴于我不知道这只黄色的狗子叫啥名字,后面的内容里我就称呼它为小黄吧。效果图听不见声音感觉有点无趣,所以我打了个安装包,想安装体验的可以扫码下载。
qr_tomcat.png

思路分析

我们先来分析一下这个小游戏的实现思路,首先是动作效果,不管是汤姆还是小黄所做的动作,其实就是一个逐帧动画,也就是将动画拆分为帧的形式,每一帧也就是一张图片,然后按序播放一组预先定义好的图片,就像播放一卷电影一样。声音效果就很简单了,在动作发生时播放音效即可。
这篇文章就分两部分讲吧,一部分是用手指戳汤姆,另一部分是小黄出来搞怪。



一、戳汤姆

1. 确定点击位置

我们点击汤姆时其实是点击了一些透明的按钮,透明效果只需要给控件alpha属性设置为0即可,如下图所示我们分别给汤姆的脚,肚子,尾巴和左右脸放置了按钮点击。
layout.png

2. 逐帧动画

逐帧动画就是加载一系列可绘制资源来创建动画,需要在xml文件的 animation-list 元素中使用 item 子元素定义动画的全部帧,并指定各帧的持续时间即可。
第一步
在/res/drawable目录下,定义一个逐帧动画的xml资源文件,如下

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:drawable="@drawable/breath_0001"android:duration="200"/><itemandroid:drawable="@drawable/breath_0002"android:duration="200"/><itemandroid:drawable="@drawable/breath_0003"android:duration="200"/><itemandroid:drawable="@drawable/breath_0004"android:duration="200"/><itemandroid:drawable="@drawable/breath_0005"android:duration="200"/><itemandroid:drawable="@drawable/breath_0006"android:duration="200"/>
</animation-list>

这里每一个item就是一帧,drawable设置动画图片资源,duration设置一帧持续的时间(ms)。

第二步
播放逐帧动画,如下

layout_animation.setBackgroundResource(R.drawable.breath);
AnimationDrawable anim = (AnimationDrawable) layout_animation.getBackground();
anim.setOneShot(true);//是否播放一次
if (anim.isRunning()) {//如果动画已经播放过anim.stop();//停止动画
}
//启动动画
anim.start();

这里很简单,直接使用AnimationDrawable类的start()方法即可启动逐帧动画,另外通过setOneShot()方法可以设置是否循环一次,为true将循环一次,然后停止并保持最后一帧。如果设置为false,则动画将一直循环。


3. 播放声音

Android中除了MediaPlayer播放音频之外,还提供了SoundPool来播放音效,SoundPool使用音效池的概念来管理多个短促的音效,适用于短且对反应速度比较高的情况(游戏音效或按键声等),所以我们选择SoundPool来给汤姆和小黄加音效。

(1) 实例化SoundPool

SoundPool pool = new SoundPool(3, AudioManager.STREAM_MUSIC, 1);//同时播放最大数量 类型 音质

可以看到SoundPool的构造函数中有三个参数,SoundPool(int maxStreams, int streamType, int srcQuality),各参数如下

  • 参数maxStreams:指定支持多少个声音,也就是同时播放最大数量。
  • 参数streamType:指定声音类型。
  • 参数srcQuality:指定声音品质。

(2) 加载声音
得到SoundPool对象之后,就可调用SoundPool的load()方法来加载声音。load()方法有四个重载,返回值都是该声音的ID,如下

//1.通过资源ID加载声音。
int load(Context context, int resld, int priority)
//2.通过FileDescriptor加载 offset开始、长度为length的声音。
int load(FileDescriptor fd, long offset, long length, int priority)
//3.通过一个AssetFileDescriptor对象所对应的文件中加载声音
int load(AssetFileDescriptor afd, int priority)
//4.通过指定的路径加载。
int load(String path, int priority)

我们把声音文件放在res下的raw文件中,所以使用第一个重载load()方法,第一个参数是上下文,第二个参数就是我们的音频资源ID,第三个参数是声音的优先级。如下代码所示:

pool.load(this, R.raw.fart003_11025, 1);

(3) 播放声音
SoundPool提供了play()方法播放指定声音,有六个参数,如下:

int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate);
  • 参数soundID:指定播放哪个声音,也就是上面load()方法返回的声音ID。
  • 参数leftVolume、rightVolume:指定左、右声道的音量。
  • 参数priority:指定播放声音的优先级,数值越大,优先级越高。
  • 参数loop:指定是否循环,0:不循环,-1:循环,其他值表示要重复播放的次数。
  • 参数rate:指定播放的比率,数值可从0.5到2, 1为正常比率。

当需要播放声音时,则调用play()方法即可,如下代码所示:

pool.play(soundId, 1, 1, 1, 0, 1);//声音id,左声道,右声道,优先级,循环,速率

二、小黄搞怪

这里我们设定了右滑屏幕小黄跑出来搞怪,其原理和戳汤姆是一样的,同样是播放逐帧动画和播放声音,只是我们触发这个事件的方式不同,当然你也可以写成戳他眼睛鼻子耳朵或者左滑下滑上滑让小黄出来搞怪,这里我就只介绍一下监听手势滑动的方法。
监听手势滑动可以利用Activity的ontouchEvent()方法或手势滑动监听器OnGestureListener等,咱们的重点在于讲解这个游戏的实现原理,这里我就只介绍第一种监听了。

首先手指滑动的时候会先按下,滑到另一个地方再抬起,我们就可以根据按下的坐标和抬起的坐标算出是往哪一个方向滑动了,如下代码所示。

    @Overridepublic boolean onTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {//当手指按下的时候x1 = event.getX();y1 = event.getY();}if (event.getAction() == MotionEvent.ACTION_UP) {//当手指离开的时候x2 = event.getX();y2 = event.getY();if (x1 - x2 > 50) {//向左滑} else if (x2 - x1 > 50) {//向右滑//小黄开始出来搞怪}}return super.onTouchEvent(event);}

最后附上源码地址:https://download.csdn.net/download/xch_yang/85493956
原创不易,转载请注明出处。



微信扫一扫下方二维码即可关注我的公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/49709.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用freepy一键生成中美GDP季度对比柱状图

这是一个单独运行的程序。下载&#xff1a; gen_echarts_bar.zip-互联网文档类资源-CSDN下载 用非常少的代码生成酷炫的图表&#xff0c;可以说&#xff0c;python和echarts是珠联璧合、完美搭档&#xff01; 该程序已经内置了python、pyecharts等需要的后台。点击运行即可生成…

2018年中美自动驾驶进展分析报告

https://www.toutiao.com/a6687368786560942599/

中美青年创客大赛启动,50万奖金等你来挑战!

中美创客交流嘉年华--2018 中美青年创客大赛火爆启动&#xff0c;50 万奖金花落谁家&#xff1f; 由教育部主办、谷歌等承办的 2018 中美青年创客大赛已于本周启动。 中美青年创客大赛&#xff08;China-US Young Maker Competition&#xff0c;简称CUYMC&#xff09;&#x…

中美数据中心产业对比及思考

近年来&#xff0c;随着大数据、云计算、人工智能&#xff08;AI&#xff09;等前沿技术领域飞速发展&#xff0c;数据应用越来越受到人们重视&#xff0c;从数据背后解读人类社会活动规律和行为习惯&#xff0c;已经为新经济模式形成奠定基础。数据已从以往的计算、统计、测量…

中美自动驾驶最新融资情况:千万级与十亿级美元的距离

https://www.toutiao.com/a6679005032412611084/ 中美是目前自动驾驶最为火热的两个国家&#xff0c;恰好也是世界GDP排名前两位的国家&#xff0c;无论是中国还是美国&#xff0c;除了科技巨头和整车企业投身自动驾驶领域&#xff0c;还有大量的初创公司蜂拥而入。 自动驾驶技…

中美IPv6发展现状分析

本文作者 马军锋&#xff1a;中国信息通信研究院技术与标准研究所主任工程师。 侯乐青&#xff1a;武警青海总队网管中心高级工程师。 在2016年12月27日发布的《“十三五”国家信息化规划》中提及&#xff1a;到2020年&#xff0c;5G完成技术研发测试并商用部署&#xff0c;互联…

数字化时代-17:从中国历年五年规划后的GDP增长看中美大碰撞的必然

前言&#xff1a; 本文通过观察中国历年五年规划后的GDP增长与美国同期GDP的增长的关系&#xff0c;展示中美大碰撞的必然性。 这是中国崛起路上必然要经过的一道坎&#xff0c;无法回避&#xff0c;能做的就是降低它的负面影响。 我们先看一下日美大碰撞&#xff1a; 在上图…

中美日印程序员收入对比

点击上方 好好学java &#xff0c;选择 星标 公众号 重磅资讯、干货&#xff0c;第一时间送达今日推荐&#xff1a;硬刚一周&#xff0c;3W字总结&#xff0c;一年的经验告诉你如何准备校招&#xff01; 个人原创100W访问量博客&#xff1a;点击前往&#xff0c;查看更多一直都…

中美领军全球AI竞赛,人工智能被高估了么?

2020-02-18 13:02:00 全文共3902字&#xff0c;预计学习时长13分钟 图源&#xff1a;Unsplash 不久前&#xff0c;谷歌前CEO施密特在出席众议院科学、太空和技术委员会的听证会时表示&#xff0c;美国可能在五到十年后失去在AI方面的领先地位&#xff0c;中国正在努力超越美国。…

中美科技成果转化比较分析

来源&#xff1a; 创新研究 近年来随着国家在不断加大科技投入&#xff0c;以及专利成果数量的快速增长&#xff0c;全社会对科技创新关注程度不断提高&#xff0c;对我国科技成果转化率低的批评不断增加&#xff0c;有文章指出“我国科技成果的转化率仅有10%&#xff0c;比美国…

中美AI争高下的秘诀!一文看尽中国AI计算力发展

https://www.toutiao.com/a6674559215056454148/ 21世纪以来&#xff0c;信息技术引领的第三次工业革命改变了人类的生产和生活的方式。几乎所有的人类活动都会使用信息技术或者留下数字印迹&#xff0c;人与人的连接&#xff0c;人与物的连接&#xff0c;物与物的连接&#x…

ChatGPT 会取代程序员吗?揭穿神话

随着技术以前所未有的速度发展&#xff0c;有关人工智能 (AI) 对各个行业的潜在影响的问题随之而来。在软件开发领域&#xff0c;最近的一项发展引发了一场重大争论&#xff1a;高级语言模型 ChatGPT 会取代程序员吗&#xff1f;虽然 ChatGPT 和类似的人工智能模型已经证明了它…

中国智能汽车“芯”的崛起

一个全新的汽车芯片时代正在加速到来。 今年以来&#xff0c;汽车芯片迎来了一波投资热潮&#xff0c;一批本土芯片厂商先后拿下车企、投资巨头的融资。同时&#xff0c;地平线、芯驰科技、宸芯科技等中国本土芯片厂商也先后实现了量产交付。 这或许只是汽车芯片国产化万里长…

智能网联汽车云控系统第3部分:路云数据交互规范

1 范围 本文件规定了智能网联汽车云控系统路侧与云端数据交互的总体架构、数据类型、传输规则以及路侧与RSU、路侧与RCU之间的数据交互协议。 本文件适用于云端与路侧RSU、云端与路侧RCU之间的应用层数据交互。 2 规范性引用文件 下列文件中的内容通过文中的规范性引用而构…

C-V2X车载终端的 “集成”之路

如何快速提升C-V2X的渗透率是行业关键挑战之一 在单车智能遭遇感知瓶颈后&#xff0c;“网联式自动驾驶”路线在安全问题上取得了突破性进展&#xff0c;成为我国自动驾驶的特色技术路线。2019年底&#xff0c;由中国智能网联汽车产业创新联盟&#xff08;CAICV&#xff09;、…

车联网各领域头部企业排行榜

来源 | 搜狐汽车研究室 推荐 |焉知自动驾驶 文章摘要 &#xff08;1&#xff09; 为紧跟车联网行业发展动态&#xff0c;聚焦优质市场主体&#xff0c;中国价值公司100排行榜之车联网企业排行榜从经营分析、发展能力以及社会责任三个维度对30家车联网重点企业进行综合评分&am…

自动驾驶/智能网联在高速公路自动驾驶货车示范应用现状

自动驾驶技术在封闭性结构化道路中最容易实现率先落地&#xff0c;高速公路作为典型的封闭性结构化道路&#xff0c;有利于自动驾驶技术商业化的快速落地。货车作为运输的重要载体&#xff0c;其行驶特点也更适合自动驾驶技术的实现。因此&#xff0c;众多厂商积极开展高速公路…

回忆2022:润和软件与openEuler的那些事儿

光阴似箭&#xff0c;我们又来到了岁末盘点时刻&#xff0c;回望2022年&#xff0c;有成长、有收获&#xff0c;更有突破。 面对市场变化和疫情防控的双重压力&#xff0c;大家齐心合力&#xff0c;奋发进取&#xff0c;让我们共同回顾润和软件与openEuler之间的辉煌成就&#…

Java高级API(上)

API文档 什么是JDK的API JDK中包含大量的API类库,所谓API(Application Programming Interface,应用程序编程接口),就是一些已经写好,可以直接调用的功能.(在Java语言中,这些功能以类的形式封装) JDK API包含类库功能强大,经常使用的有: 字符串操作, 集合操作, 文件操作, 输入…

关于第三方支付,看这篇文章就够了!

随着移动支付的快速发展&#xff0c;第三方支付已经深度融入到生活中&#xff0c;如果生活在一二线城市&#xff0c;从吃饭、购物、看电影、菜市场买菜到搭公交地铁&#xff0c;你能想到的消费场景&#xff0c;基本都可以用移动支付解决。在这些便捷的背后都有第三方支付在支撑…