2017-10-13 22 views
0

방금 ​​Java로 Pong 게임을 만들었지 만 FPS 작동 방식에 대해 몇 가지 질문이 있습니다. 현재 게임은 컴퓨터가 처리 할 수있는 최대한 빨리 실행되며, 빠른 컴퓨터에서 게임을 실행하면 게임 속도가 평소보다 빠릅니다. 나는 너무 빨리 실행에서 게임을 방지하기 위해 타이머를 추가하여이 문제를 해결 :Java - FPS가 제대로 작동하도록하십시오.

timer = new Timer(5, this); 
timer.start(); 

그러나, 타이머의, FPS 상관없이 컴퓨터가 얼마나 빨리 특정 제한을 통해 갈 수 없기 때문에. FPS가 떨어지면 프로그램을 느리게하는 대신 실제 컴퓨터 게임 에서처럼 뒤쳐지기를 원합니다. 어떻게해야합니까? 나는 프로그램이 느려지는 대신에 FPS가 떨어지도록 게임을 일정한 속도로 움직이고 싶다.

내 FPS 카운터는 현재 다음과 같습니다 : 내 질문에 대한 불분명 나는 경우

if(System.currentTimeMillis() - time >= 1000){ 
     time = System.currentTimeMillis(); 
     fps = newfps; 
     newfps = 0; 
    } 
    else{ 
     newfps++; 
    } 
    g.setFont(new Font("Arial", Font.BOLD, 25)); 
    g.drawString(fps + "", 5, 22); 

을 가르쳐주세요.

+0

"뒤떨어 짐"이란 무엇을 의미합니까? 게임이 실행되는 것보다 드로잉이 느리게 실행되기를 원하십니까? – Igor

+0

어떤 이유로 FPS가 떨어지면 프로그램 전체가 느려지는 대신 프레임을 건너 뛰기를 원합니다. 프로그램이 느려지거나 너무 빨리 실행되는 것을 막고 싶습니다. – enheldel

+0

FPS는 결국 디스플레이 하드웨어에 의해 제한 될 것입니다. 게임에서 VSynch를 구현하여 GPU 및 모니터에 최적의 속도로 데이터를 렌더링하십시오. 또한 이중 버퍼링을 사용하는지 확인하십시오. https://docs.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html –

답변

0

핵심은 스레드 문제입니다. 하나의 스레드를 사용하여 게임에 대한 모든 계산을 수행하고 다른 스레드는 렌더링을 수행하십시오. 즉, 렌더링주기가 백그라운드 처리와 독립적이므로 느려질 수는 없습니다.

+0

나는 쓰레드를 만드는 것에 대해 결코 배워 보지 못했다. 어떻게해야하는지에 대한 튜토리얼을 찾을 수있다. 고마워. – enheldel

+0

그래. 내 대답이 도움이된다면, 그것을 표시하는 것을 잊지 마십시오. – Igor