Laya 的 FairyGUI 添加 道具长按功能

本文详细介绍了如何实现长按事件监听和触发功能,包括监听方式和触发方式。通过设置长按时长、触发长按时长、长按抬起函数和抬起回调,实现了兼容单击的长按事件。在监听过程中,利用Laya.timer进行定时检查,并在达到长按判定时间后执行相应的回调函数。同时,代码中提供了抬起回调和长按持续回调的处理逻辑。

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

制作不易,有什么问题可以提出来,我来改进,谢谢大家。

长按功能分为,1.监听方式和2.触发方式两个要点


首先我们要确定

1.长按时长                                        _curTime

2.触发长按时长                                 longpressTime

3.长按抬起函数                                 TouchContinueCallBack

4.抬起回调.                                       TouchCallBack

/**
 * 长按事件监听(兼容单击)
 * @param GObject 需要注册的控件
 * @param longpressTime 长按判定时间 默认500ms
 * @param intervalTime 计时器间隔事件 默认100ms
 * @param TouchCallBack 抬起回调
 * @param TouchContinueCallBack 长按持续回调
 */
public static LongPress(This,GObject:fairygui.GObject,longpressTime = 0, intervalTime:number = 0, TouchCallBack:Function = null, TouchContinueCallBack:Function = null){
    let _This = This;
    let _isLongPress = false;
    let _isMoveDown = false;     // 是否鼠标按下
    let _longpressTime = longpressTime?longpressTime:500;   // 长按判定时间
    let _intervalTime = intervalTime?intervalTime:100;    // 计时器间隔时间

    let _curTime = 0;           // 计时器计时长按速度
    if(!GObject){
        LogUtils.log(null, "longPress - GObject is undefined ");
    }

    let _TouchCallBack = TouchCallBack;
    let _TouchContinueCallBack = TouchContinueCallBack;

    GObject.on(Laya.Event.MOUSE_DOWN, this,()=>{
        LogUtils.log(null, "LongPress Laya.Event.MOUSE_DOWN");
        _isMoveDown = true;
        //计时器
        Laya.timer.loop(_intervalTime, this, downTimeFun);
    });
    function downTimeFun(){
        _curTime+=_intervalTime;
        if(_curTime >= _longpressTime){
            loopSendCallBack();
        }
    }

    function loopSendCallBack() {
        //此处可改变不同的长按触发函数方式  例如使用二次贝塞尔曲线
        if(_TouchContinueCallBack){
            _TouchContinueCallBack(_This);
            LogUtils.log(null, "TouchContinueCallBack Function");
            return;
        }
        LogUtils.log(null, "not TouchContinueCallBack Function");
    }

    GObject.on(Laya.Event.MOUSE_UP, this,()=>{
        LogUtils.log(null, "LongPress Laya.Event.MOUSE_UP");
        if(_isMoveDown){
            Laya.timer.clear(this,downTimeFun);
        }
        _curTime = 0;
        _isLongPress = false;
        _isMoveDown = false;

        if(_TouchCallBack){
            LogUtils.log(null, "LongPress-TouchCallBack Function");
            _TouchCallBack(_This);
            return;
        }else{
            LogUtils.log(null, "not LongPress-TouchCallBack Function");
        }
    });
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值