Javascript 需要帮助插入音效播放之间的延迟吗

Javascript 需要帮助插入音效播放之间的延迟吗,javascript,android,Javascript,Android,我对安卓开发还是个新手,我被卡住了。我有一个onTouchEvent,它为旋转图形提供动力,并增加一个背景int[计数器],触发一个短音效(嘟嘟声)来播放。目前,如果[counter]>10 a,则播放声音(使用声音池),只要onTouchEvent保持counter>10,声音就会立即循环。是否可以在播放嘟嘟声效果之间插入延迟,使[counter]的值越大,延迟越小 例如: 如果(计数器==10){delay=80//in MS} 如果(计数器==90){delay=10//in MS} 我的

我对安卓开发还是个新手,我被卡住了。我有一个onTouchEvent,它为旋转图形提供动力,并增加一个背景int[计数器],触发一个短音效(嘟嘟声)来播放。目前,如果[counter]>10 a,则播放声音(使用声音池),只要onTouchEvent保持counter>10,声音就会立即循环。是否可以在播放嘟嘟声效果之间插入延迟,使[counter]的值越大,延迟越小

例如: 如果(计数器==10){delay=80//in MS} 如果(计数器==90){delay=10//in MS}

我的代码:

sm = new SoundManager();
    sm.initSounds(getBaseContext());
    sm.addSound(1, R.raw.beep);

...

@Override
public boolean onTouchEvent(MotionEvent event) {

    if (buttonClicked) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            counter++;
            startRotating();
            break;
        case MotionEvent.ACTION_UP:
            counter--;
            stopRotating();
            break;
        }
    }

    return super.onTouchEvent(event);
}

public void startRotating() {
    returnRotating = false;

    if (!keepRotating) {
        keepRotating = true;

        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (keepRotating) {
                    degrees = (degrees + 10) % 360;
                    make(degrees);
                    counter = counter + 1;

                    if (counter > 10)
                        sm.playSound(1);  // plays beep

                    handler.postDelayed(this, INTERVAL);
                }
            }
        }, INTERVAL);
    }
}
编辑:添加代码

public void stopRotating() {
    keepRotating = false;

    if (!returnRotating) {
        returnRotating = true;

        final Handler handler = new Handler();

        handler.postDelayed(new Runnable() {

            @Override
            public void run() {

                if (returnRotating) {
                    degrees = (degrees - 10) % 360;
                    make(degrees);
                    counter = counter - 1;

                    if (counter > 10) {
                    sm.playSound(1); // plays beep

                    handler.postDelayed(this, INTERVAL);
                }
            }
        }, INTERVAL);
    }
}

像这样的怎么样

  if (counter > 10) {
      sm.playSound(1);  // plays beep 
      INTERVAL = 100 - counter;
      handler.postDelayed(this, INTERVAL); 

这太简单了,太棒了。我将尝试并更新。实际上,调整间隔会导致旋转的流体运动变得起伏,所以这似乎不是一个好的解决方案。这很奇怪。你所做的只是在再次启动声音处理器之前更改延迟。如果间隔为500毫秒或200毫秒,则操作系统上没有额外的开销。这只会成为一个问题,如果你的循环真的很紧。您是否在其他地方使用INTERVAL?试着把一些log.D调用和时间放在一起吗?我更新了上面的代码,包括停止旋转部分,其中INTERVAL也被调用。啊,明白了。所以改用-handler.postDelayed(这是100个计数器);