很久不写关于游戏逻辑的文章了,略显生疏了,最近公司的项目需要用到平滑支持360度各角度摇动的摇杆,就随手写了一个,并非是区域判定的方法,那种方法很难达到用户的舒适度,体验感会下降得比较明显。
通过滑动的前后2个point来判断角度,为了舒适的平滑必须在手指离开屏幕的同时释放初始点,即如果手指没有离开屏幕时候的任何滑动的停止点都作为相对于初始点的结束点,这样做的讨巧点同样是为了提高用户体验,话不多说,大家一起来看代码:
/***
* 得到两点之间的角度
*
* @param px1
* @param py1
* @param px2
* @param py2
* @return
*/
public static double getAngle(float px1, float py1, float px2, float py2) {
float x = px2 - px1;
float y = py1 - py2;
float hyp = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
float cos = x / hyp;
float rad = Math.acos(cos);//注意反余弦
float deg = 180 * (rad / Math.PI);
if (y < 0)//
{
deg = -deg;
} else if ((y == 0) && (x < 0)) {
deg = 180;
}
return deg;
}