2012-03-31 2 views
0

Thread, MouseListerner 및 MouseMotionListener가있는 Java 애플릿이 있습니다.마우스를 움직이면 Java 애플릿이 느려집니다.

마우스를 드래그하면 애플릿에 무언가가 그려지고 내려옵니다. 그게 효과가 있지만 마우스를 이동하고 눌러지지 않을 때, 떨어지는 물체는 유창하게 움직이지 않습니다.

스레드는

while(running){ 
    repaint(); 
} 

의 mouseMoved 기능은 비어의 mouseDragged 호출 다시 칠 다시 그리기 기능을 호출합니다. 누군가이 문제를 알고 있기를 바랍니다.

+1

1) '동안 (달리기) {칠; 당신은 모든 40 밀리 초, 어쩌면 모든 (80)가 충분히 될 것이라고 빠른 업데이트가 필요하지 않기 때문에, 당신은 같은 당신의 메인 루프를 재 작업해야 }''wait()'없이는하지 마라. 2) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시한다. 3)이 천년기는 AWT 구성 요소가 아니라 Swing을 사용합니다. 4)이 프레임은 [Java Web Start] (http://stackoverflow.com/tags/java-web-start/info)를 사용하는 링크에서 시작해야합니다 (포함 애플릿이 아니라 복잡 함). –

답변

1

주 스레드로 CPU를 불필요하게 사용하고 있습니다.) (

/** 
* 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"); 
} 
+0

답변 해 주셔서 감사합니다. 구현하도록 노력하겠습니다. – user1305241

관련 문제