cocos2d-x 十一(触摸控制精灵)

在游戏的时候总会涉及到的用户操作就是通过触摸点击来控制精灵,在官方原例中已经有两例关于触摸的实例,不过都是多点触摸的案例,分别是clickAndMoved和muiltyTouch,这两例都是通过层做为代理来实现触摸事件的,这也应该算是cocos2d的标准用法了,也已经有大虾对ClickAndMoveTest一例进行了分析:http://blog.csdn.net/honghaier/article/details/8499398,所以这里就在这基础之上也研究一下虚拟摇杆的应用吧,虚拟摇杆在横板游戏中的应用算是最普遍的了,有了这个东西,就可以像玩掌机游戏一样左手控制方向,右手控制动作,在网上也看到了实现方法和讲解:http://blog.csdn.net/jukai7/article/details/8623033 实际效果:http://www.56.com/u24/v_OTE2MTQ4Nzc.html 不过这里我在想着用另一种方法来实现摇杆的作用,这里只谈谈想法,暂时没空去写代码:

上面的方式是通过判断小圆(即是摇杆)被移动到大圆(摇杆基盘)的各划分区域来判断如果移动精灵的,总体来说,效果还是能和真实摇杆一样了。其实,也可以根据小圆相对于大圆中心坐标(锚点)的角度来判断如何移动精灵:

1.大圆的圆心坐标和半径是不变的,半径可以标识为R,圆心坐标标识为(X,Y)

2.拿到小圆的圆心坐标,这里标识为(x,y)

3.根据需要划分出触发移动事件的角度,四个斜角各用30度,四个直角各用60度,这样一来,角度区域就算划分出来了

4.根据小圆当前移动到的坐标算出相对于大圆坐标的角度,公式为:angle=180*atan((x-X)/(y-Y))/3.1415926(没发现atan2)

5.根据返回的角度angle进行八次判断,在哪个角度区域内,就执行哪个移动事件(对于八次的判断很不满啊……但是这里好像没办法)

根据上面得出的摇杆角度还可以进行对精灵的相对控制:

1.重复上面步骤获取摇杆角度

2.根据上面的角度和规定精灵移动的步长以及当前精灵的中心坐标得到需要移动到的坐标点。具体设定是摇杆的角度为angle,精灵移动的步长(也就是当前精灵中心坐标p到下一点要移动到的坐标点的直线距离)为step,换算出要移动到的坐标p1,具体公式为:

double angleHude = (angle * 3.1415926 / 180);/*角度变成弧度*/ 
p1.x = (step * cos(angleHude))+ p .x;  //将移动到的x坐标
p1.y = (step * sin(angleHude)) + p .y; //将移动到的y坐标

 

 

这样的话,精灵就会按摇杆角度进行相对移动。当然,这其中地图与屏幕的坐标转换也是必须做的……