Programming/GMS

GMS, 엔진의 시스템 구조를 알아보자

wnsrn3436 2013.09.02 22:22

 

게임메이커: 스튜디오(GameMaker: Studio)에서 게임을 만들 때 액션을 적절하게 사용할 줄 안다면 초보는 벗어난 것이라고 할 수가 있습니다.

이렇게 겜스 사용자는 게임을 만들어 가면서 서서히 중수 티를 띠게 되는데, 이런 중수들 중에서도 게임메이커의 기본 시스템은 모르는 사람이 많습니다.

 

일반적인 게임메이커의 시스템은 게임을 만들면서 서서히 알아갈 수도 있지만, 이번 강좌에서는 알아두면 그만큼 좋은 중요한 기초 개념에 대해서 알아보고자 합니다.

이 강좌는 단지 총 세 개의 짧은 파트를 다루는데, 이외의 개념은 게임을 만들면서 충분히 얻어갈 수 있기 때문입니다. (예를 들면 오브젝트의 sprite_*, image_* 변수.)

 

 

1. 오브젝트와 인스턴스

 

 

 

오브젝트는 알겠는데 인스턴스는 모르겠다? 이것은 사실 말도 안되는 이야기입니다.

하지만 대부분의 중수들은 정말로 이 둘을 구분하지 못합니다.

 

 

Main1 탭의 '오브젝트를 만들던' 액션에 마우스를 갖다 대봅시다.

그런데 'Create Instance' 라고 오브젝트가 아닌 인스턴스를 만든다고 쓰여 있습니다.

오브젝트? 인스턴스? 둘의 차이는 무엇일까요?

 

오브젝트는 로봇을 만들 때 사용하는 설계도라고 보시면 됩니다.

공장에서 로봇을 찍어내야 하는데, 그러려면 먼저 이놈을 어떻게 만들고 어떻게 동작시킬 것인지에 대한 구체적인 내용이 필요하겠지요?

그래서 그것에 대한 설계도를 써내려가는 것이 오브젝트라고 할 수 있습니다.

 

반면 인스턴스는 그 설계도로서 만들어진 실질적인 개체(로봇)입니다.

오브젝트가 룸에 배치되면 그때부터 이것은 인스턴스로 분류됩니다.

하나의 오브젝트가 룸에서는 인스턴스 여럿으로 나뉘기 때문에 인스턴스 개개에서 변수에 대한 독립성이 있는 것입니다.

 

 

2. 스텝(Step)?

 

 

게임메이커의 이벤트(Event)는 어떻게 일어나는 것일까요?

아마도 많은 분께서 모든 이벤트가 동시 다발적으로 일어난다고 생각하고 계실 것입니다.

 

하지만 다시금 곰곰이 생각해보면 그렇게 되어버리면 게임이 복잡하게 꼬여버린다는 알아채실 수가 있습니다.

이벤트 순서를 정확하게 말하자면 게임메이커는 인스턴스가 생성된 순서대로 이벤트를 처리합니다. (예외적으로 깊이(Depth)에 영향을 받을 수도 있습니다.)

또한 룸 상에 존재하는 모든 인스턴스의 이벤트가 처리되었으면 한 스텝(Step)의 끝으로 간주합니다.

 

한 스텝(Step): 백그라운드 그리기 -> 기타 과정 -> 인스턴스가 생성된 순서대로 이벤트를 처리

 

우리는 대부분 오브젝트에서 스텝 이벤트는 '반복' 정도로만 인식합니다.

하지만 스텝 이벤트가 의미하는 진정한 의미는, 모든 인스턴스의 이벤트가 돌고 돌아서 다음 인스턴스로 오는 바로 그 시점이 스텝 이벤트라고 할 수가 있습니다.

 

 

위처럼 룸에서는 게임의 속도를 임의로 설정할 수가 있었습니다.

우리는 이제 이 룸 스피드를 새롭게 보아야 합니다.

 

위에서 보이는 30 이라는 숫자는 1초에 스텝을 30번 실행하겠다는 게임메이커의 약속입니다. (이 약속은 무조건 이루어지는 것은 아닙니다. CPU가 뒷받쳐 주어야 합니다.)

만약 위 숫자가 60 이라면, 1초에 모든 인스턴스의 이벤트를 반복하는 것이 60번이라는 소리입니다.

 

그래서 게임메이커의 1초는 room_speed 입니다.

이 개념은 알람을 설정할 때, 5초는 room_speed*5 를 적으면 되는 원리로 작용합니다.

 

 

3. 변수 선언

 

 

흔히 변수는 Create 이벤트에서 선언합니다.

왜냐하면, 변수를 선언하지 않고 다른 이벤트에서 변수를 사용해버리면 변수가 없다는 오류가 나기 때문이죠.

 

Create 이벤트는 변수를 선언하기에 매우 적합한 이벤트입니다.

인스턴스가 생성되면 제일 첫 번째로 실행되는 이벤트가 Create 이벤트이기 때문입니다.

 

하지만 착각하지 마셔야 할 것은 변수는 무조건 Create 이벤트에서만 선언해야 한다는 고정관념입니다.

변수는 스텝, 알람, 드로우 이벤트 등 어떠한 이벤트에서도 선언할 수가 있습니다.

단지 그 변수를 선언하기 전에 변수를 사용하면(증/감, 참조) 오류가 나는 것 뿐입니다.

 

http://cafe.naver.com/playgm

Tag
1 Comments
  • ProfileImage ㅇㅇ 2018.01.07 16:52 신고 근데 create 이벤트 외에 변수를 아무데서나 만들면 나중에 코드 분석을 할 때 여기저기서 새로운 변수가 튀어나와서 분석 난이도가 높아지더라구요. 저는 create 이벤트에서 모든 변수를 선언하여 간단한 주석을 달아놓고 그 외에는 var만 만드는 것을 선호합니다.