android游戏源码(Android实现汤姆猫小游戏)
android游戏源码(Android实现汤姆猫小游戏)
相信好多人都玩过汤姆猫这个小游戏,要做这个小游戏其实也不难,这不,现写一个,先看效果演示。
tom。gif
目前实现的主要功能点包括以下两部分:
戳tom的各个身体部位它会做出相应反馈,包括动作和声音。
往右滑动屏幕的时候另外一只黄色的小狗跳出来搞怪,并发出怪声。
鉴于我不知道这只黄色的狗子叫啥名字,后面的内容里我就称呼它为小黄吧。
思路分析
我们先来分析一下这个小游戏的实现思路,首先是动作效果,不管是汤姆还是小黄所做的动作,其实就是一个逐帧动画,也就是将动画拆分为帧的形式,每一帧也就是一张图片,然后按序播放一组预先定义好的图片,就像播放一卷电影一样。声音效果就很简单了,在动作发生时播放音效即可。
这篇文章就分两部分讲吧,一部分是用手指戳汤姆,另一部分是小黄出来搞怪。
一、戳汤姆1。确定点击位置
我们点击汤姆时其实是点击了一些透明的按钮,透明效果只需要给控件alpha属性设置为0即可,如下图所示我们分别给汤姆的脚,肚子,尾巴和左右脸放置了按钮点击。
layout。png2。逐帧动画
逐帧动画就是加载一系列可绘制资源来创建动画,需要在xml文件的animationlist元素中使用item子元素定义动画的全部帧,并指定各帧的持续时间即可。
第一步
在resdrawable目录下,定义一个逐帧动画的xml资源文件,如下lt;?xmlversion1。0encodingutf8?gt;lt;animationlistxmlns:androidhttp:schemas。android。comapkresandroidgt;lt;itemandroid:drawabledrawablebreath0001android:duration200gt;lt;itemandroid:drawabledrawablebreath0002android:duration200gt;lt;itemandroid:drawabledrawablebreath0003android:duration200gt;lt;itemandroid:drawabledrawablebreath0004android:duration200gt;lt;itemandroid:drawabledrawablebreath0005android:duration200gt;lt;itemandroid:drawabledrawablebreath0006android:duration200gt;lt;animationlistgt;
这里每一个item就是一帧,drawable设置动画图片资源,duration设置一帧持续的时间(ms)。
第二步
播放逐帧动画,如下layoutanimation。setBackgroundResource(R。drawable。breath);AnimationDrawableanim(AnimationDrawable)layoutanimation。getBackground();anim。setOneShot(true);是否播放一次if(anim。isRunning()){如果动画已经播放过anim。stop();停止动画}启动动画anim。start();
这里很简单,直接使用AnimationDrawable类的start()方法即可启动逐帧动画,另外通过setOneShot()方法可以设置是否循环一次,为true将循环一次,然后停止并保持最后一帧。如果设置为false,则动画将一直循环。
3。播放声音
Android中除了MediaPlayer播放音频之外,还提供了SoundPool来播放音效,SoundPool使用音效池的概念来管理多个短促的音效,适用于短且对反应速度比较高的情况(游戏音效或按键声等),所以我们选择SoundPool来给汤姆和小黄加音效。
(1)实例化SoundPoolSoundPoolpoolnewSoundPool(3,AudioManager。STREAMMUSIC,1);同时播放最大数量类型音质
可以看到SoundPool的构造函数中有三个参数,SoundPool(intmaxStreams,intstreamType,intsrcQuality),各参数如下
参数maxStreams:指定支持多少个声音,也就是同时播放最大数量。
参数streamType:指定声音类型。
参数srcQuality:指定声音品质。
(2)加载声音
得到SoundPool对象之后,就可调用SoundPool的load()方法来加载声音。load()方法有四个重载,返回值都是该声音的ID,如下1。通过资源ID加载声音。intload(Contextcontext,intresld,intpriority)2。通过FileDescriptor加载offset开始、长度为length的声音。intload(FileDescriptorfd,longoffset,longlength,intpriority)3。通过一个AssetFileDescriptor对象所对应的文件中加载声音intload(AssetFileDescriptorafd,intpriority)4。通过指定的路径加载。intload(Stringpath,intpriority)
我们把声音文件放在res下的raw文件中,所以使用第一个重载load()方法,第一个参数是上下文,第二个参数就是我们的音频资源ID,第三个参数是声音的优先级。如下代码所示:pool。load(this,R。raw。fart00311025,1);
(3)播放声音
SoundPool提供了play()方法播放指定声音,有六个参数,如下:intplay(intsoundID,floatleftVolume,floatrightVolume,intpriority,intloop,floatrate);
参数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等,咱们的重点在于讲解这个游戏的实现原理,这里我就只介绍第一种监听了。
首先手指滑动的时候会先按下,滑到另一个地方再抬起,我们就可以根据按下的坐标和抬起的坐标算出是往哪一个方向滑动了,如下代码所示。OverridepublicbooleanonTouchEvent(MotionEventevent){if(event。getAction()MotionEvent。ACTIONDOWN){当手指按下的时候x1event。getX();y1event。getY();}if(event。getAction()MotionEvent。ACTIONUP){当手指离开的时候x2event。getX();y2event。getY();if(x1x2gt;50){向左滑}elseif(x2x1gt;50){向右滑小黄开始出来搞怪}}returnsuper。onTouchEvent(event);}
想见你黄雨萱四次穿越,陈韵如反客为主,都留不住李子维《想见你》黄雨萱四次穿越,陈韵如反客为主,都留不住李子维!黄雨萱收到2019年李子维本尊送来的随身听,第一次穿越,来到1999年。她主导了陈韵如的身体,陈韵如自己的灵魂被……
安哥拉长毛兔(兔子不止有白色)安哥拉长毛兔(兔子不止有白色)万物志线上宠物医生一对一咨询专业宠物医生线上为您答疑解惑,足不出户解决爱宠的小病小痛。可爱软萌的宠物兔,从最初的单一品种饲……
龟苓膏的做法(纯正龟苓膏做法)龟苓膏的做法(纯正龟苓膏做法)大家好我是蓉儿,今儿咱们来做龟苓膏,总觉得用龟苓膏粉冲出来的龟苓膏不是正宗的,今天就来学古法制作,用到的都是纯天然的药材,不用龟苓膏粉,也不……
交心谈心(谈心交心,凝心聚力)交心谈心(谈心交心,凝心聚力)谈心,是人与人之间进行思想和感情交流最直接、最有效的方式,对于增进指战员感情、及时化解矛盾、密切内部关系、促进安全稳定具有不可替代的作用。近……
国土资源部网站(国土资源部网站正式更名为自然资源部)国土资源部网站(国土资源部网站正式更名为自然资源部)构建与学术的桥梁拉近与权威的距离根据自然资源部网站公告提示,目前,网站仍在按照机构改革方案进行部分内容和功能的调……
时尚美艳的摩纳哥公主!举手投足风情万种王室经常是时尚离不开的话题,当中摩纳哥王室成员更是美艳充满时尚风格。排在摩纳哥王位继承第十一位的CharlotteCasiraghi,是GraceKelly的外孙女,气质出众亦……
希伯来神话(希伯来排斥不同信仰)希伯来神话(希伯来排斥不同信仰)世界各个民族的神话无关乎都是,宇宙起源、人类的起源、文化的起源,虽然说三类是神话的创造根本,但是每个民族都对这三类有各自的理解,所以每个民……
玛琪雅朵(玛琪雅朵花海)玛琪雅朵(玛琪雅朵花海)玛琪雅朵花海位于福建省漳州市长泰县马洋溪生态旅游区山重村,坐落在山重村仙灵旗山之巅,距长泰县城25公里,距漳州市区40公里,距厦门杏林大桥20公里……
那英微博(那英微博骂人再被翻出)那英微博(那英微博骂人再被翻出)最近乘风破浪的姐姐,这档节目正在热播当中,作为一档综艺节目,自然收获了很多人的关注在节目当中,几位女星都表现出了自己的专业和能力,也向我们……
极地恶灵第二季回归,日式怪谈画皮惊悚风,消暑好选择《极地恶灵》第二季回归,新一季情节上和第一季没有延续关系,各自独立。老粉追不追看个人口味,倒是对没看过第一季的萌新很友好,可以当成一个全新的故事来看。《极地恶灵》推出的时……
吉凶悔吝(吉凶悔吝,易经的四个角度)吉凶悔吝(吉凶悔吝,易经的四个角度)《易》卜卦结果,不外乎吉凶悔吝四个字。而吉凶悔吝四个字,就是从字面上也可以看出:只有吉是好的,有利的吉祥的;凶自然是不好的,是吉……
桌面便条(将便笺条保留在电脑桌面上)桌面便条(将便笺条保留在电脑桌面上)日常工作和生活中在使用Win10电脑时,有时候,我们需要顺手记点东西,这时候Windows10自带的便签记录工具(StickyNote……