You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

摇一摇监听器触发多次骰子滚动问题求助(已尝试延迟与灵敏度调整)

解决摇一摇多次触发骰子滚动的问题

我懂你这头疼的点——摇一次手机,骰子却反复触发滚动,调了延迟和灵敏度都没改善,实在闹心!咱们来看看怎么给你的代码加个“防重复触发”的机制。

问题根源

你当前的代码只判断了shake是否超过阈值,但手机摇晃过程中,传感器会连续多次触发onSensorChanged回调,只要shake一直高于12,就会不断执行掷骰子的逻辑,自然就会重复触发了。

解决方案:添加冷却(Cooldown)机制

最直接有效的办法就是给摇一摇功能加个“冷却期”——触发一次掷骰子后,在指定时间内不再响应新的摇晃请求。具体修改如下:

  1. 先在类里添加两个成员变量:

    // 冷却时间,可根据需求调整,这里设为2秒(2000毫秒)
    private static final long SHAKE_COOLDOWN_MS = 2000;
    // 记录上次触发掷骰子的时间戳
    private long lastShakeTriggerTime = 0;
    
  2. 修改onSensorChanged里的判断逻辑,先检查冷却时间,再判断摇晃强度:

    private final SensorEventListener sensorListener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent sensorEvent) {
            float x = sensorEvent.values[0];
            float y = sensorEvent.values[1];
            float z = sensorEvent.values[2];
            acelLast = acelVal;
            acelVal = (float) Math.sqrt((double) (x*x + y*y + z*z));
            float delta = acelVal - acelLast;
            shake = shake * 0.9f + delta;
    
            // 获取当前时间
            long currentTime = System.currentTimeMillis();
            // 先检查是否过了冷却期,再判断摇晃强度是否达标
            if (shake > 12 && (currentTime - lastShakeTriggerTime) > SHAKE_COOLDOWN_MS) {
                // 更新上次触发的时间戳
                lastShakeTriggerTime = currentTime;
                // 这里执行掷骰子逻辑
                // roll dice
            }
    
            // 可选优化:当摇晃强度降到很低时,重置shake值,避免残留数值影响下次判断
            if (shake < 0.5f) {
                shake = 0;
            }
        }
    
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
    };
    

为什么这个方法管用?

冷却时间SHAKE_COOLDOWN_MS会确保在一次掷骰子触发后的指定时间内,哪怕传感器还在输出摇晃数据,也不会重复执行掷骰子逻辑。你可以根据实际体验调整这个时间,比如1500毫秒(1.5秒)也是很常用的选择。

另外那个可选的shake重置逻辑,能避免摇晃结束后shake值一直处于高位,导致下次轻轻碰一下就触发的问题,进一步提升体验。

内容的提问来源于stack exchange,提问作者Palmboom333

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:59:26