1-1Android游戏开发课程安排•开发背景•功能演示•游戏策划•开发前的准备工作•游戏的总架构•公共类的开发•游戏工具类的开发•主界面相关类的开发•刚体相关类的开发•游戏界面相关类的开发•游戏的优化与改进1-2Android游戏开发开发背景•物理引擎类游戏是目前市面上最受玩家欢迎的游戏类型之一。使用物理引擎开发的游戏充分地模拟了现实世界,使得游戏更加真实——故事背景。•引人入胜的游戏情节是本游戏中的另一个特色。本游戏以猫和老鼠之间的斗争为题材,在游戏中玩家控制老鼠消灭所有的小猫,即为游戏通关,否则为游戏通关失败。1-3Android游戏开发功能演示•本游戏的界面包括主菜单界面和游戏主界面,下面来对游戏的主要功能进行演示。1-4Android游戏开发游戏策划•游戏类型以及呈现技术。本游戏属于物理引擎类的游戏,采用的是2D贴图技术。同时由于地图大小超过了屏幕的尺寸,所以还需要采用滚屏技术。•目标平台。本游戏的目标平台为Android2.1或者更高的Android平台版本。•操作方式。本游戏采用触控的操纵方式,玩家可以通过手指拖动鼠头使得鼠头移动,橡皮筋也产生相应的形变。玩家抬起手指,鼠头飞出并且橡皮筋恢复原位。1-5Android游戏开发开发前的准备工作•游戏的准备工作主要是在进行开发之前的非代码方面的准备工作,主要包括以下两个方面。–图片资源的准备工作–声音资源的准备工作1-6Android游戏开发游戏的总架构•本游戏主要包括公共类、主界面相关类、工具类、刚体相关类以及游戏界面相关类。1-7Android游戏开发游戏公共类的开发•本游戏中的公共类包括主控制类MyBox2dActivity与常量类Constant。其他类通过访问常量类的成员变量或调用其他方法来完成自己的工作。•MyBox2dActivity类的开发•Constant类的开发1-8Android游戏开发MyBox2dActivity类的开发•Handler消息的处理•键盘事件的处理•MyBox2dActivity类的主要功能是在不同的游戏屏幕中进行切换和传递用户的交互事件。1-9Android游戏开发Constant类的开发•Constant是程序中的常量类,存储游戏中贴图的位置信息,通过创建PicLoadUtil的对象加载图片,并调用PicLoadUtil类中的scaleToFitXYRatio方法缩放图片。1-10Android游戏开发游戏工具类的开发•PicLoadUtil类的开发•Box2DUtil类的开发•SoundUtil类的开发•游戏工具类主要包括加载及缩放图片的工具类PicLoadUtil、生成刚体工具类Box2DUtil以及声音工具类SoundUtil。1-11Android游戏开发PicLoadUtil类的开发•此类的主要作用是通过BitmapFactory.decodeResource方法加载图片,通过Matrix(矩阵)实现图片的缩放,使得图片符合目标机型的屏幕分辨率。1-12Android游戏开发Box2DUtil类的开发•此类中主要是创建createPolygonImg方法,在该方法中创建多边形描述对象,并设置多边形的具体属性,最后在世界中创建刚体,并根据多边形的不同类型返回MyPolygonImg类的对象。1-13Android游戏开发SoundUtil类的开发•此类主要是创建initSounds方法对声音缓冲池进行初始化,同时创建playSound方法,该方法主要是在播放声音时调用。1-14Android游戏开发刚体相关类的开发•多边形类MyPolygonImg•猫头类BodyCat•冰块类BodyIce•木条类BodyWood•刚体类型枚举类BodyType•刚体查询工具类BodySearchUtil•刚体相关类中主要包括的类有有MyPolygonImg、BodyCat、BodyIce、BodyWood、BodyType以及BodySearchUtil。1-15Android游戏开发多边形类MyPolygonImg•此类是BodyCat、BodyIce以及BodyWood的父类,该类主要是创建自定义的绘制方法drawSelf以及创建碰撞后执行对应动作的方法doAction。1-16Android游戏开发猫头类BodyCat•此类继承自MyPolygonImg,并重写了doAction以及drawSelf方法。drawSelf方法根据不同的域值,对不同状态下的猫头进行绘制。1-17Android游戏开发冰块类BodyIce•此类也是继承自MyPolygonImg,并重写了doAction以及drawSelf方法,drawSelf方法也是根据域值的值,绘制不同状态下的冰块。1-18Android游戏开发木条类BodyWood•此类是木条类,也是继承自MyPolygonImg,该类重写了doAction方法,在绘制木条时调用的是其父类MyPolygonImg中的drawSelf方法。1-19Android游戏开发刚体类型枚举类BodyType•此类主要是声明在游戏场景中存在的刚体的类型,主要类型有LS_ZY(睁眼鼠头)、DM(地面)、ST(石条)、MT(木条)、XM(猫头)、BK(冰块)以及HNTZ(灰泥台子)。1-20Android游戏开发刚体查询工具类BodySearchUtil•此类主要是判断鼠头是否被创建,并判断记分标志位START_SCORE是否为true,如果为true,则根据碰撞物体的不同执行不同的动作。1-21Android游戏开发主界面相关类的开发•Taj鼠头或者猫头类•TJThread(鼠头和猫头控制类)•MainMenuView(主界面)•MainMenuDrawThread(刷帧线程)•该界面是游戏开始时的界面,主要的类有有Taj、TJThread、MainMenuView以及MainMenuDrawThread。1-22Android游戏开发鼠头和猫头类Taj•此类根据鼠头或者猫头初速度的不同,调用Matrix类中的setScale方法更改图片的大小,并调用drawBitmap方法绘制图形。1-23Android游戏开发鼠头和猫头控制类TJThread•此类继承自Thread,主要作用是随机的生成鼠头或者猫头的位置以及速度,创建Taj对象,并将创建的Taj对象添加到ListTaj集合中。1-24Android游戏开发主界面MainMenuView•此类表示的是本游戏的主界面,继承自SurfaceView,并实现了SurfaceHolder.Callback接口。该类中的onDraw方法为绘制界面中的各个部件,重写onTouchEvent方法为该界面中的各个部件添加监听。1-25Android游戏开发刷帧线程MainMenuDrawThread•此类的主要作用是定时调用repaint方法为主界面MainMenuView重新绘制图像,并定时更改草地及背景的位置,使得草地、背景以一定的速度向左移动。1-26Android游戏开发游戏界面相关类的开发•游戏界面类GameView•刷帧线程DrawThread•皮筋类Pijin•记录分数类Score•该界面是本游戏的游戏界面,主要的类有GameView、DrawThread、Pijin以及Score。1-27Android游戏开发游戏界面类GameView•此类是本游戏中的场景,继承自SurfaceView,并实现了SurfaceHolder.Callback接口。该类主要是调用loadGameData方法加载游戏数据,调用JBox2D中的initContactListener方法加载刚体的碰撞监听器,调用onDraw方法绘制游戏的具体场景,并调用onTouchEvent为游戏添加触控监听。1-28Android游戏开发刷帧线程DrawThread•此类继承自Thread,主要是每隔固定的时间调用repaint方法重新绘制,使得游戏时时更新,根据flag的值判断是否绘制过关对话框,并判断是否过关。创建doAddtask方法,将鼠头刚体添加进ArrayListMyPolygonImg集合中。1-29Android游戏开发皮筋类Pijin•此类是弹弓上的皮筋类,该类的主要作用是根据手指拖动鼠头的位置,动态的改变皮筋的长度,创建自定义的drawSelf方法绘制橡皮筋。1-30Android游戏开发记录分数类Score•此类是游戏的得分类,根据鼠头碰撞各个刚体所得的分数在GameView中的onDraw方法绘制得分。1-31Android游戏开发游戏的优化与改进•物体碰撞时的音效。由于本游戏只是书中的一个案例,因此在搜集音效时并不是做的很好。有兴趣的读者可以到网上搜集一些音效作为本游戏中的碰撞音效,从而大大增加游戏的可玩性。•缩放特效。《愤怒的小鸟》的游戏界面可以缩放,而本游戏的游戏界面并不可以。有兴趣的读者可以到网上查阅相关资料,自行开发该特效。•游戏未过关的对话框。开发完本游戏的过关对话框后,笔者再次开发未过关的对话框时并未开发新的对话框,只是对过关对话框做了些修改,读者可以改善该对话框的样式。•游戏分享。读者可以开发游戏分享模块,将玩游戏的成绩或者心得发到“新浪微博”、“facebook”以及“twitter”中,其他人可以看到自己的成绩或者心得。1-32Android游戏开发易则易知,简则易从。易知则有亲,易从则有功。有亲则可久,有功则可大。可久则贤人之德,可大则贤人之业。——《易经》