GameMaker강좌[GM8]/기초강좌

[게임메이커강좌-기초]인스턴스 생성하기

타락카얀 2014. 8. 14. 15:12
728x90



GAME MAKER 강좌



KAYAN





이번 강좌에선 인스턴스(오브젝트)를 생성해보도록 합시다.





◈ 인스턴스 생성하기



오브젝트는 게임메이커에서 설정한 리소스를 말합니다.



(▲ 오브젝트)


여기에서 게임에 관련된 사운드 및 음악 재생을 할 수 있고, 캐릭터의 모습을 표시하거나,

이동시킬 수 있는 다양한 이벤트를 구성할 수 있지요.
그리고 이 오브젝트를 룸에 배치시키거나 게임상에서 생성시켰을 때의 객체가 바로 인스턴스입니다.
이 인스턴스를 생성하는 것은 이 액션들로 생성할 수 있습니다.



(▲ 인스턴스 생성 액션)


먼저 Create Instance 액션은 인스턴스를 바로 생성하는 기본적인 액션입니다.



(▲ Create Instance)


생성할 오브젝트를 지정하고, 좌표를 지정하면 그 위치에 생성됩니다.
Relative를 체크하면 현재 인스턴스(위의 액션을 실행하는 오브젝트)의 (x, y)위치를 기준으로

상대위치(지정한 좌표를 더한 위치)에 생성되며, 체크 해제하면 절대위치(지정한 좌표) 생성됩니다.

Create Moving 액션은 인스턴스를 생성 후, 바로 이동 시키도록 행동을 취할수 있는 액션입니다.



(▲ Create Moving)


speed 에 속도를 direction에 방향(0~360)을 지정하면 됩니다.
direction 에 게임메이커 내장변수인 direction 을 지정하면 인스턴스의 방향을 기준으로 이동합니다.

Create Random 액션은 서로 다른 오브젝트를 여러개 지정하여, 이 중에 랜덤으로 게임 상에 한개를

생성하고자 할 때 사용하는 액션입니다.



(▲ Create Random)


게임상에서 인스턴스는 고유의 ID번호(숫자로 100000이상)를 부여하게 되는데, 이 ID를 이용하여

해당 인스턴스의 변수나 여러가지 설정들을 게임상에서 재설정을 할 수가 있습니다.

하지만 액션으로는 기능이 부족하여 인스턴스를 제어할 수 없다는 단점이 있습니다.
그러나 코드를 사용하면 제어할 수 있지요.

물론 이를 통해 재설정한다하더라도 오브젝트의 기본 설정은 변경 되지 않습니다. 리소스 상에서의

변형은 없고, 단지 게임 상에서 이 ID를 통해 생성된 인스턴스에만 별도로 이벤트를 변경할 수 있는

것입니다.

인스턴스 생성은 다음과 같은 함수를 사용하여 생성합니다.

     instance_create(x,y,object)

사용법은 액션과 마찬가지로 좌표를 지정하고, 생성할 오브젝트를 지정하면 됩니다.



     instance_create(x,y,object0);



간단하죠.
인스턴스를 생성하면 그 인스턴스의 ID가 부여되는데, 이것을 변수에 저장할 수가 있습니다.



     inst=instance_create(x,y,object0);



그러면 이 변수를 통해 생성된 인스턴스를 제어할 수 있는 겁니다.
인스턴스의 변수를 제어할 때는,


     (인스턴스ID).변수=값


이와 같은 형식로 변수를 제어할 수 있습니다.


     예) A.check=5


예를 들어 인스턴스를 생성한 다음, Create Moving 액션처럼 이동시켜봅시다.



     inst=instance_create(x,y,object0);
     inst.direction=270;
     inst.speed=10;



이런 식으로 응용할 수가 있어요.
먼저 인스턴스를 생성하고, 그 인스턴스의 ID를 inst 임의 변수에 저장합니다.
그리고 ID를 저장한 임의 변수 inst를 이용해 인스턴스의 directionspeed 변수의 값을 지정하여

이동시키는 것입니다.

인스턴스를 여러개 생성하려면 어떻게 해야할까요?
간단합니다.
그냥 코드를 여러번 반복하여 인스턴스를 생성하게 하면 됩니다.


예를 들어 0, 90, 180, 270 방향으로 이동하는 4개의 인스턴스를 생성한다면,



(▲ x,y위치에 4개의 인스턴스를 생성하여 각각 4개의 방향으로 이동)


단순히 아래와 같이 (x,y)위치에 생성하고자 하는 오브젝트를 4개 생성하면 됩니다.

그리고 각각의 인스턴스 ID에 방향과 속도를 설정해주면 되는 것이지요.



     inst=instance_create(x,y,object0);
     inst.direction=0;
     inst.speed=10;


     inst=instance_create(x,y,object0);
     inst.direction=90;
     inst.speed=10;


     inst=instance_create(x,y,object0);
     inst.direction=180;
     inst.speed=10;


     inst=instance_create(x,y,object0);
     inst.direction=270;
     inst.speed=10;



이렇게 응용할 수 있습니다.
이것은 위에서 아래로 순차적으로 실행되는 이벤트를 응용한 것입니다.
ID를 저장하는 변수명은 같지만, 순차적으로 실행되어 인스턴스를 생성한 후 변수에 ID를 저장하면

그 인스턴스의 ID로 갱신이 되어, 해당 인스턴스를 제어할 수 있게 하는 것이지요.

만약 아래와 같이 한다면, 



     inst=instance_create(x,y,object0);
     inst=instance_create(x,y,object0);

     inst.direction=90;
     inst.speed=10;
     ...



이것은 마지막에 생성한 ID만 directionspeed 값이 적용됩니다.
똑같이 inst 에 생성한 인스턴스의 ID를 저장하였더라도 마지막에 저장한 ID가 최종 갱신된 ID이기 때문에
마지막에 생성한 인스턴스의 directionspeed 값만 변경됩니다.

그래서 위와 같이 하면 마지막 것만 적용되어 제대로 이동을 하지 않을 것입니다.
즉, 일시적으로 인스턴스를 여러개 생성하여 각각 변수에 서로 다른 값을 주려면, 인스턴스를 생성했을 때

ID마다 따로 따로 변경해주어야 하는 것이지요.





300x250