호야킴 MYPI

호야킴
접속 : 3096   Lv. 32

Category

Profile

Counter

  • 오늘 : 3 명
  • 전체 : 6198 명
  • Mypi Ver. 0.3.1 β
[게임메이커] 게임메이커에서 룸스피드와 스텝 이벤트에 대한 팁. (0) 2017/01/24 AM 03:15
게임 메이커에서는 룸스피드 기준으로 시간이 흘러갑니다
룸스피드는 개발자가 맘대로 설정 할 수 있는데  보통 60,  혹은 30 으로 설정해두는 게 일반적이에요.

룸스피드가 60이면 초당 60회의 스텝 이벤트가 진행이 된다는 뜻입니다.
룸스피드가 30이면? 초당 30회의 스텝 이벤트가 진행이 된다는 뜻이 되죠.
초당 출력되는 프레임이랑 비슷한 뜻이라고 할 수 있겠네요.

오브젝트를 생성하면 볼 수 있는 스텝이벤트는 룸스피드에 따라서 1/룸 스피드 초로 작동한다는 것입니다!
게임을 만들 때 이런 기준으로 작업을 해왔습니다만 게임을 진행하다보니 문제에 부딪쳤어요.
문제는 이 스텝은 정확한 시간을 기준으로 진행이 되는 것이 아닌 것입니다.
인스턴스가 너무 많아져서 렉이 걸리면 이 스텝이 밀리고 밀리게 됩니다.


0초     1초        2초      3초      4초      5초      6초      7초      8초      9초      10초
0스텝   30스텝   60스텝   90스텝  120스텝  150스텝  180스텝  210스텝  240스텝  270스텝  300스텝

이런 식으로 흘러 갈 줄 알았는데 실상은

0초     1초        2초      3초      4초      5초      6초      7초      8초      9초      10초
0스텝   30스텝   60스텝   90스텝  120스텝  140스텝  155스텝  180스텝  210스텝  250스텝  270스텝
                                        ↑ 렉 발생!

이렇게 흘러가더란 말이죠. 이렇게 되면 리듬게임이나 타이밍을 중시한 게임은 포기해야합니다. ㅠ_ㅠ
구현하려고 했던것은 리듬게임도 타이밍 게임도 아니고...npc가 음악에 맞춰서 노래를 부르는 것이었습니다.

%BF%C0%C6%E4%B6%F33-jinspaike.jpg

<목표 : 유명한 파이널 판타지의 오페라 이벤트...?>

여러 게임에서는 이런 문제를 해결하기 위해서, 프레임스킵이라던지, 델타타임이든지 각종 꼼수를 쓰고 있습니다.
해결방법이 없나 궁리를 했는데 시스템에 어울리는 방안이 안나오고
더 머리를 쓰기는 귀찮고 current_time 명령어를 가지고 해결을 하기로 했습니다.
current_time은 현재시간을 밀리세컨드 단위까지 받아와서 기록을 해주는 명령어 입니다.

Create Event
start_time = current_time 이벤트 시작 할 때 시간을 기록합니다.
now_time = 0 // 현재 진행 시간 초기화

for (i=0; i<1000; i+=1)
{
 song[i] = false //가사출력했는지 확인용
};
// 대사 등록 명령어 등등//
Step Event
now_time = current_time - start_time

if (now_time> 타이밍2) && (song[순서2] = false){
해당 대사 출력
song[순서] = true
}
else if (now_time> 타이밍1) (song[순서1] = false){
해당 대사 출력
}
여기서 타이밍단위는 예를 들면 93000 을 쓰면 93초 라는 뜻이에요. 12.5초라면 12500 가 되겠죠~
이런 식으로 스텝이벤트에 더 이상 머리를 쓰지 않고 노가다를 해서 해결을 했습니다.

song_kore22.gif.gif

그래서 게임 안에서는 요런식으로 음악에 맞춰 대사가 나옵니다. 짤은 음악이 안나오지만...

 

안드로이드용 : 모여라! 촛불집회 - 집회 키우기 게임 다운로드도 많이 해주세요~

신고

 
X