本节书摘来自异步社区《Android 应用案例开发大全(第二版)》一书中的第2章,第2.3节案例的基本框架 ,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.3 案例的基本框架
Android 应用案例开发大全(第二版)
对本案例中每个类进行详细介绍之前,首先要对本案例的基本框架进行简单的介绍。本节将要介绍案例的框架以及案例中各个类的作用,以及类与类之间的关系,从而使读者在阅读后面的章节时可以更好地理解案例的详细开发过程。

2.3.1 壁纸项目的框架结构
本小节将对3D水族馆动态壁纸的整体框架进行介绍,使读者对本案例的开发过程有深刻的理解,更加熟悉了解壁纸的制作流程,其框架如图2-14所示。


从图2-14中可以看出,本项目中包含很多不同的类,主要分为5大类。分别是壁纸实现类、绘制类、线程类、工具常量类及辅助绘制类等。这里简单了解一下即可,后面的小节将进一步进行较为详细的介绍。

2.3.2 各个类的简要介绍
为了让读者更好地理解本案例中各个类的作用及各个类之间的联系,本小节将按照上小节划分的5大类对所有本项目中的类一一进行简要介绍,具体内容如下。

1.壁纸实现类
壁纸服务类GLWallpaperService。
该类是3D水族馆动态壁纸的基础类。此类为壁纸项目的开发提供了服务接口,开发人员通过重写该类中的onCreateEngine方法等来实现壁纸功能。

动态壁纸类LiveWallpaper。
该类是实现3D水族馆动态壁纸的重要类。此类继承了壁纸服务类GLWallpaperService,并且重写了onCreateEngine 方法,在该方法内创建了自定义的场景渲染器,并且将该渲染器的渲染方式设置为主动渲染模式。

自定义渲染器类TDRender。
该类是3D水族馆动态壁纸案例中的核心类。在这个类中创建了本案例中需要绘制的所有对象,初始化需要的纹理,设置摄像机位置,设置各个对象的绘制方式等。

2.绘制类
气泡控制类BubbleControl。
该类是所有气泡的控制类。该类定义了所有气泡并将气泡对象添加到气泡列表中,创建并启动气泡移动线程,然后根据气泡的位置对气泡进行排序,最后遍历气泡列表并绘制气泡。

单个气泡类SingleBubble。
该类的作用是绘制场景中的单个气泡。在此类中定义了气泡的所有属性,如气泡的位置、纹理、气泡的最大高度等。每调用一次此类中的bubbleMove方法,气泡就会移动一小段距离,如果气泡的Y位置大于气泡高度的最大值,就会调用newPosition方法重新设置气泡的位置和气泡的最大高度,这里气泡的位置和最大高度是在一定范围内随机给出的。

群鱼控制类FishControl。
该类是群鱼的控制类(群鱼是指不包括鱼群的所有单条鱼的集合)。在该类中定义了群鱼列表,列表中存放着所有的单条鱼对象,创建并启动鱼的移动线程,最后遍历群鱼列表对单条鱼进行绘制。

单条鱼类SingleFish。
该类的作用是绘制单条鱼。在此类中定义了单条鱼的所有属性,包括鱼的位置、速度、外力、鱼食对鱼的吸引力、鱼的质量(力的缩放比)、鱼的旋转角度等。该类中的fishMove方法用来计算鱼的旋转角度,鱼所受到的外力(包括鱼和鱼群之间)和鱼食对鱼的吸引力,这两个力动态改变着鱼的游动速度大小和游动方向。

鱼群控制类FishSchoolControl。
该类是鱼群的控制类。在此类中定义了鱼群中的每条鱼,这些鱼组成了可以一起游动的鱼群,鱼群中的第一条鱼不受到其他任何鱼的外力,只受墙壁作用力。创建并启动鱼群的游动线程,遍历鱼群列表实现对鱼群的绘制。

单个鱼群类FishSchoolSingle。
该类的作用是绘制鱼群里的单条鱼。在此类中定义了鱼群中每条鱼的所有相关属性,具体包括鱼的位置、速度、外力、鱼偏离相对位置(以鱼群中第一条鱼所在的位置为球心,以定长半径确定的球面上的一个点)后受到的向心力、鱼的质量、鱼的旋转角度等。该类中的fishschoolMove方法用来计算鱼的旋转角度和修改鱼的速度。

鱼食类SingleFood。
该类的作用是创建并启动线程,绘制鱼食。在此类中定义了食物的移动线程,计算鱼食对鱼的吸引力线程,食物的y坐标,并创建了启动以上两个线程的方法startFeed,最后绘制鱼食。

喂食类FeedFish。
该类是食物的控制类。此类的startFeed方法用来计算触控点与摄像机所在位置连成的直线与地面交点的世界坐标系坐标,如果是第一次调用此方法,此方法还会调用SingleFood的startFeed方法来启动SingleFood中创建的两个线程。

3.线程类
气泡移动线程类BubbleThread。
该类是气泡的移动线程。在此类中会不断遍历气泡列表调用气泡对象中的bubbleMove方法,从而实现气泡的移动。

群鱼游动线程类FishGoThread。
该类是群鱼游动线程类。在此类中遍历群鱼列表判断两条鱼之间的距离,若距离小于阈值,则两条鱼之间会产生力的作用。对鱼进行碰壁检测,当鱼与墙壁的距离小于阈值时鱼会受到与墙壁垂直的力。然后修改鱼所受到的外力、鱼的速度和位置。

鱼群游动线程类FishSchoolThread。
该类是鱼群游动线程类。在此类中遍历鱼群列表并判断鱼群中的鱼(不包括第一条鱼)与相对位置 (以鱼群中第一条鱼所在位置为球心,以定长半径确定的球面上的一个点)的距离,若距离大于阈值就会对该条鱼产生向心力。然后对鱼群进行碰壁检测,碰壁时鱼群受到一个与墙壁垂直的力。最后修改鱼所受到的外力、鱼群的速度和位置。

鱼食移动线程类FoodThread。
该类是鱼食移动线程类。在此类中只要喂食线程的标志位没有被置成false就会不断修改鱼食的X方向和Z方向的位置使鱼食产生晃动效果。然后定时修改鱼食的Y位置。

鱼食对鱼产生吸引力线程类AttractThread。
该类是鱼食对鱼产生吸引力的线程类。在此类中不断遍历群鱼列表判断鱼是否能看到鱼食,如果鱼能看到鱼食,则该鱼受到鱼食的吸引力作用使鱼向着鱼食游动,当鱼与鱼食之间的距离小于阈值后鱼食消失,认定鱼食已经被鱼吃掉。本案例中鱼食对鱼群中的鱼不产生吸引力作用。

4.工具常量类
常量类Constant。
该类是整个壁纸中用到的所有静态常量集合。将一些常用静态常量定义到常量类Constant中,会降低程序的维护成本,同时会增强程序的可读性。

向量类Vector3f。
该类是本案例中用到的三维向量对象。包含了案例中所有需要的向量算法,具体包括求向量的模、向量的减法、向量的加法,向量的归一化等。

模型加载类LoadUtil。
该类作用是加载obj文件中模型的相关信息,然后生成顶点数据、纹理坐标数据(有时也会生成法向量数据)、最后构造对应的模型对象。

摄像机矩阵类MatrixUtil。
MatrixUtil类的setCamera方法通过调用Matrix类的SetLookAtM方法生成摄像机的观察矩阵。Matrix类的UtilfromGToO方法用于求经指定变换矩阵逆矩阵恢复的点坐标。

屏幕拾取类IntersectantUtil。
该类是和拾取相关的工具类(主要是在对鱼进行喂食的时候会用到该类中包含的相关算法),通过拾取计算获得摄像机位置所在点与屏幕触控点连线和地面交点的世界坐标系坐标。

5.辅助绘制类
背景图辅助绘制类BackGround。
该类的主要作用是构造水族馆背景和地面的纹理矩形。

气泡辅助绘制类Bubble。
该类主要是构造一个纹理矩形并贴上气泡纹理从而用于气泡的绘制。

模型辅助绘制类LoadedObjectVertexNormalTexture。
该类的主要作用是对加载的模型信息进行处理,形成顶点坐标缓冲和纹理坐标缓冲,并将相关的缓冲数据送入渲染管线,用于绘制。

《Android 应用案例开发大全(第二版)》——2.3节案例的基本框架相关推荐

  1. 不要放过那个装X的阿里,android游戏开发大全第二版PDF

    这都不是被导师剥削的问题,这个是自然规律在逼着你. 你和水稻谈休假问题,水稻不会停下来等你. 张启发院士带的博士生,甚至是院士本人,绝大部分时间,就是一年四季跟着水稻转. 有认识张启发院士的学生说,张 ...

  2. 《Android 应用案例开发大全(第二版)》——2.6节绘制相关类

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第2章,第2.6节绘制相关类 ,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区"异步 ...

  3. 《Android 应用案例开发大全(第二版)》——6.1节Android系统的信使:Intent

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第6章,第6.1节Android系统的信使:Intent ,作者李宁,更多章节内容可以访问云栖社区"异步 ...

  4. 《Android 应用案例开发大全(第二版)》——导读

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的目录 ,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  5. 《Android 应用案例开发大全(第二版)》——1.5节第一个Android程序——Hello Android...

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第1章,第1.5节第一个Android程序--Hello Android ,作者 吴亚峰 , 于复兴 , 杜化美, ...

  6. 《Android 应用案例开发大全(第二版)》——2.4节壁纸的实现

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第2章,第2.4节壁纸的实现,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区"异步社 ...

  7. 《Android 应用案例开发大全(第二版)》——2.2节壁纸策划及准备工作

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第2章,第2.2节壁纸策划及准备工作,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区" ...

  8. 《Android 应用案例开发大全(第二版)》——2.5节辅助绘制类

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第2章,第2.5节辅助绘制类,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区"异步社 ...

  9. 《Android 应用案例开发大全(第二版)》——2.9节壁纸的优化与改进

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第2章,第2.9节壁纸的优化与改进 ,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区" ...

最新文章

  1. 紫书 习题 10-17 UVa 11105 (筛法)
  2. 转Meta的http-equiv属性详解
  3. 使用babel编译es6
  4. CreateJS基础 学习笔记(上)
  5. CF988 D. Points and Powers of Two【hash/数学推理】
  6. 启动hadoop遇到的datanode启动不了
  7. mac中的csv文件到windows平台乱码的解决办法
  8. SQL 存储过程中,将串连的字符串当表用。
  9. AI能为智能手机带来哪些惊喜?Gartner列了这十大应用
  10. fairygui 与 spine动画的适配处理
  11. 前端生成PDF,让后端刮目相看
  12. 背离 - MBA智库百科
  13. 【day4】【洛谷算法题】-P5708三角形面积-刷题反思集[入门1顺序结构]
  14. SEO入门学习:关键词密度和布局
  15. RedHat8.0配置本地yum源
  16. 「CodePlus 2017 11 月赛」大吉大利,晚上吃鸡!(dij+bitset)
  17. 记一次windows 10 无法升级问题的处理(系统盘MBR转GPT)
  18. 计算机自定义桌面,电脑桌面图标自定义摆放,如何自定义桌面图标
  19. Unity捕鱼达人5-----鱼群的生成
  20. [读后感] 书名:追风筝的人

热门文章

  1. css alpha滤镜
  2. OpenStack对象存储——Swift
  3. 使用 IntraWeb (4) - 页面布局之 TIWRegion
  4. 关于sql 资源竞争死锁现象
  5. AppStore ipa (苹果内购)笔记
  6. 搭建LAMP架构之Apache2.4.4安装及管理
  7. 案例实战:采用redis生成淘宝商品的全局id
  8. matlab中ndims函数,matlab中的size(),length(),ndims()函数的用法
  9. centos mysql开发包_CentOS 7 安装 MySQL-阿里云开发者社区
  10. 工作展望简短_元旦祝福语大全简短