Java-апплет замедляется при перемещении мыши - PullRequest
0 голосов
/ 31 марта 2012

У меня есть Java-апплет с потоком, MouseListerner и MouseMotionListener.

При перетаскивании мыши на апплете рисуется что-то, а затем оно падает. Это работает, но когда мышь перемещают и не нажимают, падающий объект не движется свободно.

Поток вызывает функцию перерисовки

while(running){
  repaint();
}

Функция mouseMoved пуста, вызовы mouseDragged перерисовываются. Я надеюсь, что кто-то знает эту проблему, спасибо

1 Ответ

1 голос
/ 31 марта 2012

Вы загружаете процессор (излишне) своим основным потоком.Поскольку вам не нужны обновления быстрее, чем каждые 40 миллисекунд, а может быть, и каждых 80 будет достаточно, вы должны переработать свой основной цикл примерно так:

   /**
 * internal game loop method.
 */
public void updateGameState() {
    lastFrameTime = System.currentTimeMillis();

    // as long as we run we move
    while (state == GameState.RUNNING) {
        currentFrame++;
        timeNow = System.currentTimeMillis();

        // sleep until this frame is scheduled
        long l = lastFrameTime + FRAME_DELAY - timeNow;
        updatePositions();
        redraw();
        //System.err.println("............. delay:" + l);
        if (l > 0L) {
            try {
                Thread.sleep(l);
            }
            catch (Exception exception) {
            }
        } else {
            // something long kept us from updating, reset delays
            lastFrameTime = timeNow;
            l = FRAME_DELAY;
        }

        //System.err.println("lft: " + lastFrameTime + " tn: " + timeNow);
        lastFrameTime = timeNow + l;
        // be polite, let others play
        Thread.yield();
    }
    ///System.err.println("leave game loop");
}
...