首页 > 代码库 > NGUI混合FingerGesture《卷一》 统一坐标

NGUI混合FingerGesture《卷一》 统一坐标

问题背景

使用FingerGesture 获取触碰点2D坐标, 将该2D坐标赋值给NGUI元素,发现位置出现偏差。

排查思路

1:NGUI的 (0,0,0)默认位置是在屏幕正中心。而FingerGesture(0,0,0)默认位置是在屏幕的左下角

2:NGUI采用了基于高度的缩放机制,各个分辨率被模拟成一个经过ManualHeight运算之后的结果。  FingerGesture触碰点2D坐标是符合屏幕的分辨率的。

解决之道

1:将GingerGesture触碰的坐标(基于左下角),换算成NGUI的坐标体系(基于屏幕正中心)

2:将换算之后的坐标,乘以当前屏幕和ManualHeight的缩放值。

 

解决代码

1) 初始化参数

  private float _screenHalfWidth;
    private float _screenHalfHeight;
    private float _scaleFactor;


//在类的构造函数里面初始化参数
//SCREEN_NORMAL_HEIGHT的意思见上图,本例使用720高度
   _scaleFactor = GlobalDataHelper.SCREEN_NORMAL_HEIGHT / Screen.height;
        _screenHalfWidth = Screen.width * 0.5f;
        _screenHalfHeight = Screen.height * 0.5f;

 

2)调用,point是FingerGesture的OnGesture事件的参数 e.Position

  Vector3 newPos = new Vector3(point.x - _screenHalfWidth, point.y - _screenHalfHeight) *_scaleFactor;
        transform.localPosition = newPos;