2014-04-17 8 views
1

저는 C++ 프로그래밍이 처음인데 우주 침략자와 비슷하게 느슨한 게임을 만들고 있습니다.시간 경과 후 변수 값 변경

내가 원하는 것은 부울 값인 "player.shield"입니다.이 값은 false 일 때 20 초 후에 다시 값을 true로 변경합니다.

어떻게해야합니까?

어떤 도움에 감사드립니다 : D

답변

0

플랫폼에 따라 다릅니다

2) 시작 타이머, 당신은 일반적으로 등을 사용하는 라이브러리, 비동기 타이머의 경우, 게임에서 이것은 일반적으로 모든 게임 메 커닉을 제어 된 방식으로 다루는 메인 루프에서 다르게 수행됩니다.

e.e. 대신 가능성이 언제든지 임의의 순서로 실행할 수있는 타이머의 수십 가지고, 당신은 오히려이 같은 함수를 만들 :

void onGameTick() 
{ 
    DWORD currentTime = ::GetTickCount(); 

    if (player.shield && currentTime - player.shieldAcquiredTime < 20) { 
    player.shield = false; 
    // You can also do other things here like trigger a sound effect etc. 
    } 

    // Do other logic, like move players, enemies, shots etc. 
} 

그런 다음 각 화면 업데이트하기 전에 또는 타이머 또는 무엇이든하여이 함수를 호출합니다.

이 기술을 사용하면, 항상 선형 방식으로 디버깅 할 쉽게, 같은 순서로 이루어, 게임 상태의 변경이 매우 명시 적으로 만들

+0

이 당신을 순전히 감사 가능한 멀티 스레드 데이터 레이스 등을 피하기 이! 나는 그것을 약간 조정했고 완벽하게 작동했다. void ShieldDisabled() { DWORD currentTime = :: GetTickCount(); player.shieldAcquiredTime + = 1; if ((player.shield == false) && player.shieldAcquiredTime> 2000) { player.shield = true; \t 경우 (player.shieldAcquiredTime> 2,500) \t \t \t { player.shieldAcquiredTime = 0; \t} } } – user3045068

+0

OK, 그 방법은 다른 방법이지만 정확한 간격으로 호출해야하므로 매번 변수가 균등하게 증가합니다. 그럼에도 불구하고'currentTime' 부분을 제거 할 수 있습니다. – Yirkha

1

그것은 당신이 값을 업데이트하는 콜백을 등록 할 수 Win32 API 함수 SetTimer를 통해 수행 할 수 있습니다.

MSDN documentation

-1

다음은 C++ 타이머 기준에 a link입니다. 설정

1) "player.shield = true"로 당신은 몇 가지 더 많거나 적게 사용할 수있는 경우에도

#include <ctime> 

inline void timeSec(clock_t sec) 
{ 
    clock_t start_time = clock(); 
    clock_t end_time = sec * 1000 + start_time 
    while(clock() != end_time); 
}