UE4中对华为机型OnTouchMoved的处理

本文介绍了在UE4中遇到的华为机型触摸事件处理问题。当尝试在移动端实现不依赖拖动的交互时,发现华为设备在按下时会误触发MouseMove事件。经过分析,推测可能是华为机型的触控灵敏度较高或UseHighPrecisionMouseMovement设置导致。为解决此问题,提出了两种策略:一是针对华为机型进行特定优化;二是通过判断移动距离是否超过一定阈值来区分移动和点击。通过调整代码,在MouseMove事件中检查位置变化是否超过一定范围,从而避免误触发后续逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UE4中对华为机型OnTouchMoved的处理

1.简述

试想这样一个移动端的触摸场景:不要拖动该控件,仅松开手指/鼠标后处理,可不可行?
其实很简单,按下时记录初始状态,移动时设置一个标记位,如果触发了移动,那么松开时根据这个标志位的情况来执行后续逻辑即可。
类似这样:

--处理按下事件
function YourPanel:MouseButtonDown(InGeometry, InGestureEvent)
	self.m_NotMove = true
end

--处理移动事件
function YourPanel:MouseMove(InGeometry, InGestureEvent)
	self.m_NotMove = false
end

--处理抬起事件
function YourPanel:MouseButtonUp(InGeometry, InGestureEvent)
	if self.m_NotMove then
		--do something ,如果触发了move那么此处跳过
	end
end

我们之前实现过基础的功能:可以参考以下文章
UE4中触摸屏的拖拽缩放功能——lua实现

到这里为止一切正常,不过此处测试华为机型时,有意思的来了,手指按下时,经常会走到MouseMove里去,导致后续逻辑无法正常运行,猜测是华为机型采样灵敏度高或底层开启了UseHighPrecisionMouseMovement高精度鼠标移动引起的

2.处理方法

找到了原因,可以提供两种思路:一类是针对机型修改优化;二是在应用层对偏移的位置做判断,比如移动距离大于一个单位时才判定为移动

--处理移动事件
function YourPanel:MouseMove(InGeometry, InGestureEvent)
    local changepos = (thisPos - self.m_Offset)
    if math.abs(changepos.X) > 1 or math.abs(changepos.Y) > 1 then
        self.m_NotMove = false
    end
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值