2015-01-20 4 views
2

Cocos2dx에서 밀리 초를 보여주는 데 어려움을 겪고 있습니다. 다른 컴퓨터에 다른 코드 기반을 사용하는 것을 피하고 싶습니다. Cocos2dx에서 Milliseconds를 어떻게 계산합니까?

는 32 비트 아이폰/아이팟 플랫폼에서 작동하지만 64 비트에 항상 0 초를 반환하고 시간은 통과하지 :

timeval time; 
gettimeofday(&time, NULL); 
unsigned long millisecs = (time.tv_sec * 1000) + (time.tv_usec/1000); 
return (float)millisecs; 

동일하게 64 비트 아이폰/아이팟 플랫폼 및 32 비트에이 기능 만하는 기반으로 클럭 사이클, 사용자가 텍스트 메시지를 가져옵니다 또는 백그라운드에서 실행중인 프로그램이있는 경우, 그래서 시간이 팽창 시키는데 :

clock_t t; 
t = clock(); 
return 10000.0 * ((float)t)/CLOCKS_PER_SEC; 

이 정확하게 시간을 카운트 만 초 (하지 밀리 초)에서 :

내가 찾은 유일한 방법은 반복적 인 업데이트 이벤트 &을 dt를 플로트 (항상 정확함)에 추가하는 것입니다. 이는 정확하지만 이상적은 아닙니다.

기본적으로 업데이 트에서 나는 괜찮

timeElapsed += dt; 

을 가지고 있지만 업데이트 실행을 계산 진행 시간이있을 경우에만 작동합니다.

답변

0

32 비트 및 64 비트 장치에 불일치가 있으며 시간을보고하는 방법이 있습니다. 32 개 비트 디바이스에서 잘 작동하는 코드 :

timeval time; 
gettimeofday(&time, NULL); 
unsigned long millisecs = (time.tv_sec * 1000) + (time.tv_usec/1000); 

모든 64 개 비트 디바이스에 0 "의 밀리 세컨드 값"을 설정합니다. 내가 찾은 유일한 해결책은 "_millisecs"라는 부동 소수점 값을 가지며, 내 update() 함수의 첫 번째 줄에 _millisecs에 dt를 추가합니다. 이것은 함수 안에서 정확한보고를 제공하지는 않지만, update()가 처음으로 계획된 이후로 얼마나 많은 시간이 경과했는지 정확하게보고 할 것입니다.

0

안녕하세요, cocos2d-x에서 시작/정지 시간을 측정하는 데 사용하십시오. 나는 cpp 파일에서 사용한다. 나는이 스 니펫을 https://code2relax.wordpress.com/tag/measure/에서 얻고 잘 작동합니다.

typedef unsigned long long timestamp_t; 

struct time_measure { 
    timestamp_t start; 
    timestamp_t stop; 
    double result; 
}; 

timestamp_t get_timestamp() { 
    struct timeval now; 
    gettimeofday(&now, NULL); 
    return now.tv_usec + (timestamp_t)now.tv_sec * 1000000; 
} 

void update_time(struct time_measure *t) { 
    t->result = (t->stop - t->start)/1000000.0L; 
    CCLOG("%f", t->result); 
} 

내가 함수 내에서 측정 할 필요가

: 사유 재산, 타입 정의와 함수를 선언 파일을있는 .h하기로

time_measure tm; 

tm.start = get_timestamp(); 
// long running task, download images 
tm.stop = get_timestamp(); 
update_time(&tm); 

당신은 time_measure의 TM을 이동할 수 있습니다. cpp 파일 기능 구현 및 cocos2d-x 장면의 어느 위치에서 시간을 측정 할 수 있습니다.

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 32 비트 iPhone 및 Android에서이 기능이 훌륭하지만 64 비트 iPad에서 호출하면 항상 0이 반환되므로 타이머가 실행되지 않습니다. – redux

+0

안녕하세요, 저는 iPhone6에서 실행하여 작동합니다. tm.start와 tm.stop 사이에 집중적 인 작업이 있는지 확인할 수 있습니까? 그들이 너무 가까울 때 iOS 장치는 매우 빠르며 결과는 0이 될 수 있습니다. 또한 CCLOG ("U 시간 : % llu", now.tv_usec + (timestamp_t) now.tv_sec * 1000000)를 사용하여 get_timestamp 내부의 값을 인쇄 해보십시오. 숫자가 표시되므로 작동해야합니다. – Elensar

+0

잘 작동 나를 위해 iPhone6 ​​및 내 iPad Air,하지만 내 iPad mini 2, gettimeofday (& time, NULL); 항상 0을 반환합니다. 저는 iPad 2의 이상한 문제에 대해 읽었습니다. 어쩌면이 컴퓨터에서만 고유 할 수도 있습니다 (또는 어쩌면 코드의 다른 부분에서 깨기도합니다).안녕하세요, 안녕하세요, "Cocos2dx에서 Milliseconds를 어떻게 계산합니까?"가 아니라 장치에 문제가 있습니다. "안녕하세요, 오늘 HelloWorld 빌드를 수행하여 스니 피트 및 역행을 테스트하십시오. – redux