天天看点

《Android 3D 游戏案例开发大全》——6.6节游戏界面相关类

本节书摘来自异步社区《android 3d 游戏案例开发大全》一书中的第6章,第6.6节游戏界面相关类,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区“异步社区”公众号查看

6.6 游戏界面相关类

android 3d 游戏案例开发大全

前一小节为读者介绍了辅助界面相关类,本小节将对游戏界面相关类进行介绍,首先介绍游戏界面的各个组成部分,然后介绍游戏整体界面的开发,逐步完成对游戏界面的开发,下面就对这些类的开发进行详细介绍。

6.6.1 顶点数据管理者vertexdatamanager

本小节为读者介绍的是整个游戏过程中所有物体顶点数据的管理者vertexdatamanager,具体开发步骤如下。

(1)首先为读者介绍的是本类主要框架的开发,其代码如下。

第4-10行是初始化该类的成员变量。第12-19行是进入菜单界面时加载物体顶点位置、纹理坐标数据进内存缓冲的方法。第21-44行是进入游戏界面时加载物体顶点位置、纹理坐标数据进内存缓冲的方法。

(2)完成本类主体框架的开发后,接下来为读者介绍的是初始化房间顶点数据的方法,其代码如下。

第3-18行是房间的顶点坐标数据的初始化。第13行是房间的顶点数。第14-33行是房间的顶点纹理坐标的初始化。本类中一些方法与房间的顶点数据的初始化方法相似,由于篇幅所限这里不再一一介绍,需要的读者请自行查阅随书光盘中的源代码。

(3)接下来介绍的是大星空顶点数据的初始化方法,星空是由一些随机生成的点组成的,其代码如下。

第4-14行是星星顶点坐标数据的初始化,星星的顶点坐标是随机生成的。第16-34行是顶点的着色数据的初始化。小星空顶点数据的初始化和大星空顶点数据的初始化方法类似,这里不再赘述,有需要的读者请自行查阅随书光盘中的源代码。

(4)接下来为读者介绍的是游戏界面中软体箱子顶点数据的初始化方法,其代码如下。

第2-16行是各种变量的声明与初始化。第17-52行是顶点坐标数组与顶点纹理坐标数组的初始化,其原理为:箱子的高分成fd层,每层有8个顶点,循环到的层的顶点坐标由此8个顶点组成,其中第18-29行是每层的8个顶点坐标的计算。

第18和24行是本层上下两排顶点的旋转角度,根据当前层和传入的箱子的旋转的总角度计算,然后根据当前排的旋转角度计算顶点坐标,计算公式为:x'=xcos (currangle)-zsin (currangle)和text{z }!!'!!text{ }=xsin (currangle)+zcos (text{currangle}),其中x和z为最底排顶点坐标中的x轴坐标和z轴坐标。

第53-62行是将顶点坐标数组和顶点纹理坐标数组中的数据分别存入相应的缓冲。

6.6.2 纹理图数据管理者picdatamanager

上一小节为读者介绍了游戏中物体顶点数据的管理者,本小节为读者介绍的是游戏中纹理图数据的管理者picdatamanager,其代码如下。

第4-6行是声明该类中成员变量。第7-13行是声明并初始化数组texnamearray,该数组中存放的是本游戏中用到的所有纹理图的名字。

第28-44行是两个方法loadpicdata,两个方法实现的功能是将加载界面的图片数据和其他界面的图片数据加载进内存。

第46-62行是方法loadfromassets,该方法实现的功能是从assets中加载一幅纹理图。

6.6.3 游戏界面txzgamesurfaceview

前面小节为读者介绍了游戏界面中用到的顶点数据与纹理数据,接下来为读者介绍的是游戏界面的整体类txzgamesurfaceview,其是整个游戏的重要组成部分,其具体的开发步骤如下。

(1)介绍本类具体开发代码之前,首先为读者介绍的是本类的主要框架,其代码如下。

第4-58行是成员变量的声明与创建。第59-66行是该类的构造器,其对相关成员变量进行了赋值,并创建渲染器、设置渲染器,同时设置渲染模式为主动模式。

(2)介绍完本类的主要框架后,接下来为读者介绍的是本类中的触控方法,首先介绍触控方法的框架,其代码如下。

第7-14行是外层摇杆的触控边缘位置。第16-21行是根据外层摇杆的触控边缘位置计算出的摇杆中心点的位置和摇杆的半径。

第22-23行是获得触控位置。第24-34行表示的是判断是何种动作并作出相应操作。第35-36行是更新上一次的触控位置。

(3)介绍完触控方法的框架之后,接下来介绍的是上一步中省略的按下操作的代码,其代码如下。

第10-17行是判断触控点是否在摇杆内,如果在摇杆内则将触控点在摇杆内的标志位置为true。

第18-35行是判断触控点是否在转换视角的按钮范围内,是则做出相应的操作。

第36-51行是触控点在输赢界面的返回按钮上,则返回到菜单界面。

第52-77行是触控点在输赢界面的下一关或重玩按钮上,则进入下一关或重新进入本关。

(4)前面介绍了按下动作的处理代码,接下来介绍的是移动动作的处理代码的开发,其代码如下。

第2-7行是判断是否移动动作。第9-19行是如果不在第一视角内、移动动作标志位为true,并且按下的初始位置不在摇杆内,则将改变摄像机的动作添加到动作队列。

第20-27行是如果移动标志位为true,并且按下的初始位置在摇杆内,则将摇杆动作添加到动作队列。第28-36行是如果为前进动作,则将前进动作添加到动作队列,并将前进标志位置为false。

(5)介绍完移动动作处理代码的开发后,下面为读者介绍的是前面省略的抬起动作时处理代码的开发,其代码如下。

第2-7行是将抬起动作添加到动作队列。第8-32行是如果按下的初始位置在摇杆内,则根据摇杆的不同动作将机器人的不同动作添加到动作队列。

(6)介绍了本类的触控方法后,接下来介绍的是本类中的内部类scenerenderer,首先介绍其中的重写方法,其代码如下。

第2-5行是各种成员变量的声明。第6-17行是本内部类中的绘制方法ondrawframe。第18-28行为重写onsurfacechanged方法,在该方法中设置了视口的大小和位置,计算了宽高比,同时打开了背面剪裁。

第31-37行设置了关闭抖动、使用快速模式、打开深度检测、打开背面剪裁,并设置为平滑着色。

第38-50进行了一些成员变量的初始化。第51-61行创建并开启了改变软体箱子动画帧的线程。第62-74行创建并开启了改变天空旋转角度的线程。

(7)接下来为读者介绍的是游戏界面的绘制方法,首先介绍倒影的绘制,其代码如下。

第7行是调用方法cameraposition进行摄像机的设置,方法cameraposition是根据当前为第一视角或第三视角设置了摄像机,其中还对软体箱子进行了排序,由于篇幅所限,这里不再详细介绍,有需要的读者可查看随书光盘中的源代码。

第8-21行是将绘制数据复制进临时变量。第22-43行是倒影的绘制。第44-48行是水面的绘制。

(8)介绍完倒影的绘制后,接下来为读者介绍的是实体、摇杆和转换视角虚拟按钮的绘制,其代码如下。

第4-13行是机器人、房间和天空的绘制。第14-43行是循环关卡数组绘制除软体箱子外的实体。第44-61行是软体箱子的绘制。

第62-89行是摇杆和转换视角的虚拟按钮的绘制。第90行是调用方法判断游戏是否结束,并绘制结束界面的标志,由于篇幅所限,这里不再介绍,读者可查看随书光盘中的源代码。

6.6.4 动作队列执行线程txzdoactionthread

本游戏将除摇杆动作外的操控动作对象存储在了一个操控队列,本节为读者介绍的是从此操控队列中取出操控动作进行执行的线程,其具体的开发步骤如下。

(1)首先给出的是该类的架构,只有了解了架构才能更好地进行开发,其代码如下。

第4-10行是成员变量的声明。第11-15行是该类的构造方法,其在其他类创建该类对象时被调用。

第19-22行是从动作队列的队首取出一个操控动作。第25-43行是判断是何种动作,然后做出相应的操作。

(2)接下来为读者介绍的是上一步骤中省略的机器人前进动作的相应操作,其代码如下。

第9-11行是机器人遇到的是水和摆好的木箱时不做任何动作。第12-22行是遇到的是目标时,机器人向前走。

第23-29行是遇到的是人在目标点上,机器人向前走。第30-41行是遇到桥或人时,机器人向前走。第42-72行是遇到的是箱子时的操作,判断箱子前面是什么,是否能走。

图像说明文字 提示

前面省略的机器人动作的方法十分简单,由于篇幅问题,这里不再一一赘述,需要的读者可自行查阅随书光盘中的源代码进行学习。

继续阅读