본문 바로가기
GameMaker강좌[GM8]/기초강좌

[게임메이커강좌-기초]with문

by 타락카얀 2014. 3. 15.
728x90



GAME MAKER 강좌



KAYAN





이번 강좌에서는 with문을 통해 현재 오브젝트에서 다른 오브젝트 관련 이벤트 발생시키는 것에 대해

알아보도록 합시다.






◈ with문



룸에는 오브젝트들의 수 많은 인스턴스들이 있습니다.
그 여러 인스턴스들 중 공통의 오브젝트가 있을 수 있지요.
보통 다른 오브젝트의 변수 설정은



     obj_player. x=320
     obj_player. y=240



이런 식으로 하지요.
하지만 이것은 룸에 obj_player가 1개 일때 변경하기 쉽지만, 여러개 인스턴스가 있을 경우

obj_player 들 중 1개만 변경하게 됩니다. 그리고 이벤트 역시 변수 설정정도만으로 그칠 것입니다.
하지만 with문을 사용한다면 달라집니다.

     with(오브젝트){  - 이벤트 -  }

with문은 이러한 양식을 가지고 있습니다.
그저 with에 오브젝트를 지정하고 이벤트를 작성하면 되는 것이지요.
그러면 지정한 오브젝트에서 이벤트가 발생하게 됩니다. 그것이 1개든, 혹은 여러 인스턴스든,

지정한 오브젝트에 관련된 수 많은 인스턴스들에서 동일한 이벤트를 발생시킬 수 있지요.

예를 들어,



     with( obj_player )
     {

     move_towards_point(320,240,2);
     sprite_index = spr_player_move;

     if move = 0
     {
     move = 1;
     instance_create( x, y, obj_effect1);
     }

     }



이것과 같이 지정한 오브젝트의 인스턴스들이 룸에 여러개 있을 때, 모든 인스턴스들의 변수는 물론,

함수를 비롯한 조건문을 이용한 이벤트조차 구성할 수 있습니다.
보통 개별 오브젝트의 변수를 설정할 때 instance_exists로 룸에 있는지 체크했지만, with문은

instance_exists 지정한 오브젝트가 룸에 있는지 굳이 체크하지 않아도 된다는 점도 유용합니다.
그리고 조건문을 이용해 조건에 해당하는 인스턴스들만 이벤트를 실행시킬 수도 있습니다.






with문은 for문, repeat문과 같이 반복문 형태로 실행됩니다.
그래서 지정한 오브젝트에서 이벤트도 실행할 수 있지만, 원하는 조건의 해당 인스턴스 역시 추려낼

수 있지요.
예를 들어,



     var inst;
     inst = noone;

     with( obj_player )
     {
     if move = 1{ inst=id; break; }
     }

     if instance_exists(inst){ inst. speed=5; }



이렇게 한다면 지정한 오브젝트의 move 변수가 1인 경우를 찾아 해당 인스턴스의 id를 임시 변수인 inst에

할당하고, with문을 끝내게 합니다. 그리고 인스턴스를 찾은 경우 그 인스턴스의 speed를 5로 설정하는

것이지요. 물론 이것은 with문 안에서 처리할 수 있습니다만, 다양한 상황에 인스턴스의 id가 필요한 경우,
이렇게 응용을 할 수 있는 겁니다.

with문에서는 충돌이벤트에서 사용하던 other를 사용할 수 있습니다. 충돌 이벤트에서 other는 충돌 상대를

치칭하던 기능이지요. with문 안에서는 with문을 실행하는 당사자를 가리킵니다.
예를 들어, 아래의 스크립트를 B의 이벤트에서 실행한다면,

     with(A){ other. direction+=1; }

other는 이 스크립트를 실행하는 B의 방향을 변경하게 됩니다.
또 다른 예로, 아래의 스크립트를 B의 이벤트에서 실행한다면,

     with(A)
     {
     with(C){other. direction+=1;}
     }


이것의 이벤트는 B에 있지만, other가 있는 스크립트는 A가 실행하기 때문에 A를 지칭하게 됩니다.





300x250

댓글