룸스피드는 개발자가 맘대로 설정 할 수 있는데 보통 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가 음악에 맞춰서 노래를 부르는 것이었습니다.
<목표 : 유명한 파이널 판타지의 오페라 이벤트...?>
여러 게임에서는 이런 문제를 해결하기 위해서, 프레임스킵이라던지, 델타타임이든지 각종 꼼수를 쓰고 있습니다.
해결방법이 없나 궁리를 했는데 시스템에 어울리는 방안이 안나오고
더 머리를 쓰기는 귀찮고 current_time 명령어를 가지고 해결을 하기로 했습니다.
여러 게임에서는 이런 문제를 해결하기 위해서, 프레임스킵이라던지, 델타타임이든지 각종 꼼수를 쓰고 있습니다.
해결방법이 없나 궁리를 했는데 시스템에 어울리는 방안이 안나오고
current_time은 현재시간을 밀리세컨드 단위까지 받아와서 기록을 해주는 명령어 입니다.
Create Event
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 가 되겠죠~
이런 식으로 스텝이벤트에더 이상 머리를 쓰지 않고 노가다를 해서 해결을 했습니다.
이런 식으로 스텝이벤트에
그래서 게임 안에서는 요런식으로 음악에 맞춰 대사가 나옵니다. 짤은 음악이 안나오지만...
안드로이드용 : 모여라! 촛불집회 - 집회 키우기 게임 다운로드도 많이 해주세요~