如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
6.1360°平滑游戏导航摇杆在Android系统中很多机型是没有实体导航按键的,那么如果想让一个游戏在所有Android系统的机型上运行,就要利用Android系统都支持触屏的特点来进行设计。既然所有Android系统都支持触屏,那么就可以想到,在屏幕上绘制一个游戏摇杆供用户操作游戏,这也是目前Android游戏开发中最常用的一种做法了。下面就来实现Android手机上的360°平滑游戏摇杆吧!首先观察如图6-1所示的效果。图6-1摇杆示意图图6-1是一个摇杆的示意图,从图中加以分析:l玩家操作的应该是中心红色的小圆;l小圆的最大活动范围是围绕大圆做圆周运动;l既然小圆有活动范围,那么当用户的触屏点在大圆以外的位置,那么小圆的角度应该与用户触点的角度相同。首先实现的应该是在屏幕上绘制两个大小不一的圆形,并且让小圆中心点围绕大圆做圆周运动。新建项目“RockerProject”,游戏框架为SurfaceView游戏框架,项目对应的源代码为“6-1(360°平滑游戏摇杆)”。修改MySurfaceView://定义两个圆形的中心点坐标与半径privatefloatsmallCenterX=120,smallCenterY=120,smallCenterR=20;privatefloatBigCenterX=120,BigCenterY=120,BigCenterR=40;//当前圆周运动的角度privateintangle;//修改绘图函数:publicvoidmyDraw(){1...//绘制大圆paint.setAlpha(0x77);canvas.drawCircle(BigCenterX,BigCenterY,BigCenterR,paint);//绘制小圆canvas.drawCircle(smallCenterX,smallCenterY,smallCenterR,paint);...}新封装一个圆周运动时,得到小圆坐标的方法:/***小圆针对于大圆做圆周运动时,设置小圆中心点的坐标位置*@paramcenterX*围绕的圆形(大圆)中心点X坐标*@paramcenterY*围绕的圆形(大圆)中心点Y坐标*@paramR*围绕的圆形(大圆)半径*@paramrad*旋转的弧度*/publicvoidsetSmallCircleXY(floatcenterX,floatcenterY,floatR,doublerad){//获取圆周运动的X坐标smallCenterX=(float)(R*Math.cos(rad))+centerX;//获取圆周运动的Y坐标smallCenterY=(float)(R*Math.sin(rad))+centerY;}这里是根据角度弧度的转换,再通过三角函数定理得到小圆坐标位置的。逻辑函数:privatevoidlogic(){//让角度在0~360循环angle++;if(angle>=360){angle=0;}//弧度=角度PI/*180setSmallCircleXY(BigCenterX,BigCenterY,BigCenterR,angle*Math.PI/180);}运行项目,效果如图6-2所示。2图6-2圆周运动此步完成之后,下面就应该考虑用户触点的位置,大概分为两种情况:l用户触点位置在大圆内或者大圆上,那么小圆的中心点直接跟随玩家触点位置即可;l用户触点位置在大圆外,那么小圆中心肯定在大圆的圆周上,但是小圆所在大圆上的角度,应该等同于用户触点位置相对于大圆的角度。首先删去刚才在逻辑函数中的代码,然后封装一个得到玩家触点相对于大圆角度的方法:/***得到两点之间的弧度*@parampx1第一个点的X坐标*@parampy1第一个点的Y坐标*@parampx2第二个点的X坐标*@parampy2第二个点的Y坐标*@return*/publicdoublegetRad(floatpx1,floatpy1,floatpx2,floatpy2){//得到两点X的距离floatx=px2-px1;//得到两点Y的距离floaty=py1-py2;//算出斜边长floatHypotenuse=(float)Math.sqrt(Math.pow(x,2)+Math.pow(y,2));//得到这个角度的余弦值(通过三角函数中的定理:邻边/斜边=角度余弦值)floatcosAngle=x/Hypotenuse;//通过反余弦定理获取其角度的弧度