2016-12-02 4 views
2

게임용 MVP를 작성했습니다. 하지만 이제는 스톱워치를 추가하여 플레이어가 게임의 왼쪽 하단이나 오른쪽 하단에 카운트 다운 시간을 볼 수있게하고 싶습니다. 이것은 내 게임에 그것을 포함하는 방법과 같은 중지 시계를 만드는 방법에 대한 질문이 아닙니다.내 게임에 타이머를 추가하기 위해 스레드를 구현하는 방법은 무엇입니까?

화면에 시계 숫자를 렌더링하는 방법을 알았지 만 문제는 입력을 사용하여 시계를 트리거 할 때 게임이 시계 루프에 걸린 채로 남아 있다는 것입니다. 몇 가지 코드를 설명하는 것이다 :

// when the player makes her first input the clock is triggered 

if (!CLOCK) 
    this->clockStatus(ON); 


// within the clockStatus function 
void Game::clockStatus(TimerState Status) 
{ 
    do {        /* Infinite Loop */ 
     t2->getTimefromSeconds(getCurrentSysTime()); 
     break; 
    } while (1); 
    while (1) {      /* Another infinite loop */ 
     t_inter->getTimefromSeconds(getCurrentSysTime()); 
     t1 = (Timer*)(t_inter - t2); 
    } 
} 

(T1)의 출력을 통해 표시된다. 명확성을 위해

t1.display(); 

, TimeState 스톱워치 상태 (ON/OFF)를 관리하는 ENUM 타이머가되어있다 실제 스톱워치 클래스.

연구를 마친 후 플레이어가 스톱워치를 작동시키는 게임에 처음 입력 할 때이를 위해 새 스레드를 만들어야한다고 결론을 냈습니다. 이렇게하면 주 기능이 정상적으로 실행되고 보조 스레드가 게임 시간을 계산할 수 있습니다. 이것을 구현하는 방법을 읽을 수있는 자습서 나 pdf 또는 연습이 있습니까? 또한 모든 유용한 제안을 환영합니다.

+0

억측이 상황에서'threads'이 필요합니다, 당신은 중간 거기. 디스플레이/렌더링에 어떤 플랫폼을 사용하는지 알고 있으면 도움이됩니다. 예를 들어 Qt를 사용한다면 Qt의 Timer 클래스를 쉽게 사용할 수 있습니다. 그것은 위젯 디스플레이 시스템이있는 그대로 멀티 스레드입니다. – Quirk

+0

'타이머'란 무엇이며't1','t2' 및't_inter' 유형은 무엇입니까? – qxz

+0

OpenGL과 GLFW를 사용하는 임. 하지만 C++을 사용하여 스톱워치를 작성하고 싶습니다. – MagnusHimmler

답변

1

내가 알고있는 것으로부터, 스톱워치를 시작한 다음 시작한 이후 경과 한 시간을 표시 할 수 있기를 원합니다. 가장 쉬운 방법은 시작 시간을 저장 한 다음 (현재 렌더링 루프에서) 현재 시간과의 차이를 찾는 것입니다.

#include <chrono> 

inline auto currentTime() { 
    return std::chrono::high_resolution_clock::now(); 
} 

struct Timer { 
    Timer() { reset(); } 
    void reset() { // reset the stopwatch to 0 
     startTime = currentTime(); 
    } 
    double getElapsed() { // get the elapsed time (in seconds) 
     return std::chrono::duration_cast<std::chrono::nanoseconds>(
        currentTime() - startTime 
       ).count()/1000000000.0; 
    } 
    std::chrono::time_point<std::chrono::steady_clock> startTime; 
}; 

사용 예제 : :이 헬퍼 클래스 사용할 수

// global 
Timer stopwatch; 

// when the player does first input (or whenever) 
stopwatch.reset(); 

// in your loop 
double stopwatchSeconds = stopwatch.getElapsed(); 
// display the value... 
+0

qxz를 고맙습니다. – MagnusHimmler

+0

@MagnusHimmler qxz의 답을 받아들이는 것을 잊지 마세요. –

관련 문제