- 음악과 나 -/『 짬 통 』

때리는 타이밍

noon2dy 2006. 5. 18. 00:03

 

2005-02-11 오후 4:19:41   /  번호: 10339  / 평점:  (-) category: Game Analysys  /  조회: 208 
 드럼게임제작관련질문... 세상정복 / musiclove  
세상정복님께 메시지 보내기  세상정복님을 내 주소록에 추가합니다.  세상정복님의 블로그가 없습니다  

 현재 드럼게임을 제작하고 있습니다.

그런데 때리는 드럼이 나오는 시점과 언제 때려야 하는지 이런 저런 생각을 하니

잘 실마리를 못잡고 있습니다. 혹시 드럼게임을 만들어보셨거나

도움을 주실 수 있으시면 연락을 주시면 감사하겠습니다.

딜레이부분이 2200msec 이고 화면시작부터 때리는 곳까지가 500pixel입니다.

그리고 한마디는 32개로 나뉘어 지는데 이것의 플레이 시간 즉 한마디 플레이 시간이 1740msec일때

어떤식으로 공식을 이끌어내야 하는지 머리가 아프군요...

선배님들의 많은 도움 부탁드립니다. 화면상에서 500pixel은 1초동안에 이동을 해야하구요..

현재 게임루프에서 30msec마다 체킹을 하고 있습니다.

루프부분의 처리와 구조를 잡기가 참으로 힘듭니다.

현재 클래스로 눈에 보일것을 vector에 넣고 그것의 y좌표를 계산해서

스피드만큼 추가하는 방법을 씁니다. 현재는 블록이 나오는것이나 아구가 전혀 안맞고 있습니다.

답답한 노릇이죠...

주저리주저리 쓰다보니 정리가 엉망이군요...

선배님들의 많은 도움 부탁드립니다.

그럼 새해 복 많이 받으세요...^_^

이 글에 평점 주기:  
  2005-02-11 오후 11:59:57   /  번호: 10340  / 평점:  (-)  
 Re: [Re] 드럼게임제작관련질문... 굿맨 / mrchoi21  
굿맨님께 메시지 보내기  굿맨님을 내 주소록에 추가합니다.  굿맨님의 블로그가 없습니다  

드럼과 관련된 게임이라면,

먼저 BPM 이라는 개념을 이해하셔야 합니다.

 

BPM(Beats Per Minute)은 분당 1박자를 때리는 횟수를 말하며,

 

학교 다닐 때 보았던 음악교과서의 제일 윗부분에 보면

 

콩나물 = 120

 

이런식으로 되어있는 것을 말합니다.

 

예를들어서

 

BPM 이 120 이 되는 곡이라면

 

이곡에서 1 박자의 시간은

1초를 1,000(ms)의 구간으로 쪼갤경우(timeGetTime 함수의 시간으로 측정할때)

 

1분은 1,000(ms) * 60(초) = 60,000 (ms) 이 되겠고요,

 

6,0000 / 120(BPM) = 500(ms) 가 됩니다.

 

즉 1박자는 500(ms) 이고,  ==> 4분음표

반박자(1/2)는 250(ms),   ==> 8분음표

반의 반박자는 125(ms) 가 됩니다. ==> 16분음표

 

이런 계산이라면, 우리가 보는 악보에서 1마디의 연주시간은 2초가 되는 셈이죠.^^

 

이 원리를 이용하면 막대가 화면의 픽셀과 어떻게 이동해야 하는지를

계산할 수 있게 되는데,

 

화면 좌표가 정수좌표인 경우,

 

박자의 구간은 경우에 따라서 실수 구간 나타날 수도 있습니다.(BPM이 실수인 경우도 있으므로..)

 

좀 더 정확하게 박자를 맞추려면,

좌표계는 실수를 누적시켜서 계산을 하고,

화면에 그릴때는 정수로 truncation을 시키면 좀 더 정확한 박자를

구현할 수 있을겁니다.

 

그럼, 건투를...

 

 

이 글에 평점 주기:  
  2005-02-12 오후 4:50:42   /  번호: 10350  / 평점:  (-)  
 Re: 예..감사합니다.시도해봐야겠어요..^_^(냉무) 세상정복 / musiclove  
세상정복님께 메시지 보내기  세상정복님을 내 주소록에 추가합니다.  세상정복님의 블로그가 없습니다  

 ^_^

이 글에 평점 주기:  
  2005-02-12 오후 1:26:45   /  번호: 10346  / 평점:  (-)  
 Re: 감사드립니다...^_^ 세상정복 / musiclove  
세상정복님께 메시지 보내기  세상정복님을 내 주소록에 추가합니다.  세상정복님의 블로그가 없습니다  

답변 정말 감사합니다.^_^

현재 timegetitme()함수를 써서 하려고 하니 밀리세컨드단위에서

오차가 생길것 같습니다. 그래서 타이머를 쓰려고하는데요..

50/1000정도하면 비교적 정확한 데이터를 가져올수있을것 같습니다.

timegettime()으로 하면 도착라인에 가서 오차가 생길것 같아서요..흠...

그런데...혹시 timer에 최소치가 얼마인가요..

작을수록 좋겠지만 제가 알기로는 특정 시간 이후에는 틀린시간을 호출있다고 해서요..

정확한 시간치가 몇 밀리세컨드까지인지 알수 있을까요..??

또 timegettime()을 쓴다면 호출을 규칙적으로 하는 방법은 없나요..

oldtime에서 newtime에 차가 매번 달라서요..규칙적이면 좋겠는데 말입니다.

이 부분에서 자문을 구합니다.

날씨가 차가운데 감기 조심하시구요..

그럼 즐거운 하루되세요..

다시한번 감사드립니다..^_^

 

이 글에 평점 주기:  
  2005-02-12 오후 3:09:10   /  번호: 10348  / 평점:  (-)  
 Re: [Re] 감사드립니다...^_^ 굿맨 / mrchoi21  
굿맨님께 메시지 보내기  굿맨님을 내 주소록에 추가합니다.  굿맨님의 블로그가 없습니다  

타이머를 쓰게되면, 조금 오차가 생길수도 있습니다.

 

저의 경우에는 타이머를 쓰지않고, timeGetTime()를

 

사용했었는데요, 제어하기 좀 불편해도, 원하는 타이밍을

 

맞추는데는 큰 불편은 없었습니다.

 

참고 바랍니다.^^

이 글에 평점 주기:  

'- 음악과 나 - > 『 짬 통 』' 카테고리의 다른 글

비트매니아 대략.  (0) 2006.05.18
peekmessage  (0) 2006.05.18
캐릭터 쩜프  (0) 2006.05.17
시리얼시리얼 소프트  (0) 2006.05.17
시리얼 포트제어  (0) 2006.05.16