如何提高ReactNative中的PanResponder效率?

时间:2018-07-21 06:51:07

标签: react-native events

我正在使用React Native开发游戏(也许不是最好的框架,但不是重点)。我需要用户能够在网格上滑动。在图片上,用户选择了 MKEC 而没有从屏幕上移开手指。

我来自网络,所以我认为我会使用onHover事件。但是它在移动设备上并不存在。因此,我创建了一个父组件和一个网格组件。父组件使用PanResponder捕获事件,然后计算用户手指在网格上的位置,并更改网格组件的状态。

但是,如果用户从一个字母转到另一个字母的速度太快,有时会“跳过”一个字母。如果您从M到G(第一列)的移动速度非常快,似乎没有在H上触发事件。我清楚吗?用户感到延迟。

componentWillMount() {

    const onRelease = (evt, gestureState) => {
        this.props.validateWord();
    };
    const onMove = (evt, gestureState: GestureState) => {
        const obj = Object.assign({}, {
            pageX: evt.nativeEvent.pageX,
            pageY: evt.nativeEvent.pageY
        });

        const pos = {
            x: evt.nativeEvent.pageX - this.position.pageX,
            y: evt.nativeEvent.pageY - this.position.pageY
        }
        const whatSquare = whatSquareIsTouched(
            pos,
            defaultLetter.width, // size of letter
            defaultLetter.width * 0.22 // padding for diagonale
        );
        const letter = this.props.gridReducer[whatSquare.y]
        && this.props.gridReducer[whatSquare.y][whatSquare.x] ?
            this.props.gridReducer[whatSquare.y][whatSquare.x] : null;
        // if letter => if touch is on a letter and not outside of grid comp
        if (letter) {
            this.props.letterTouched(letter, whatSquare.insidePadding);
        }

    }
    this._panResponder = createResponder(onMove, onRelease);
}

如何改进我的代码?还是另辟another径解决这个问题?

enter image description here

评论后更新:

我还没有解决问题。但是我尝试了以下。我假设当用户更改方向时,会触发一个新事件。这样我就可以计算出手指路径。如果用户从M处开始并在G处结束而没有改变方向,则H悬停了。

0 个答案:

没有答案