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