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

[게임메이커강좌-기초] 특정 오브젝트 찾기

by 타락카얀 2016. 12. 8.
728x90



GAME MAKER 강좌



KAYAN









◈ 특정 오브젝트 찾기



이번 강좌에서는 동일한 오브젝트들 중, 변수 값이 다르다던가, 또는, 특정 변수 값일 때, 가장 근접해 있는

오브젝트를 찾는 방법에 대해 알아봅시다.



(▲ 오브젝트 찾기)


먼저 동일한 오브젝트들 중, 인스턴스를 개별적으로 찾는 것은,


 

instance_find(object,n)



이와 같은 함수를 사용하여 찾을 수 있습니다.

이 함수는 지정한 오브젝트 중, 룸에 있는 n 번째 인스턴스를 찾는 함수이며, n은 0번(첫번째

인스턴스)부터 시작합니다.
이 함수는 보통 아래와 같은 형식으로 사용할 수 있습니다.


 

n=instance_number(object); //룸에 해당 오브젝트가 몇개 있는지 체크
for(i=0;i<n;i+=1;){              //for 문을 통해 오브젝트 수 만큼 체크
inst=instance_find(object,i); //인스턴스를 선택
//-------------
해당 인스턴스를 제어함.
//-------------
}



룸에 오브젝트 수 만큼 반복문을 통해 인스턴스를 찾아 조건에 맞는 오브젝트를 추려내는 방식에

사용되지요.
예를 들어, 아래와 같이,



(▲ 특정 오브젝트 찾기)


변수 set 값이 5 보다 큰 여러 obj_ball 오브젝트들 중, 가장 근접해 있는 인스턴스를 찾는다면,


 

var n,dist,inst,it,i;
n=instance_number(obj_ball);//룸에 해당 오브젝트가 몇 개 있는지 체크
dist=1000000;//거리는 최대. 반대로 멀리 있는 오브젝트를 찾는 경우, 음수(-1)로 설정.
inst=noone;//찾을 인스턴스

for(i=0;i<n;i+=1;){
it=instance_find(obj_ball,i);//인스턴스를 선택

//----- ▼ 조건에 맞는지 체크
if it.set>5{//set 변수가 5보다 큰가?
if point_distance(x,y,it.x,it.y)<dist{//최대 거리보다 가까이 있는가?

dist=point_distance(x,y,it.x,it.y);//조건에 충족하면, 가까운 거리로 갱신함
inst=it;//조건에 맞는 인스턴스를 찾음

}
}
//----- ▲ 조건에 맞는지 체크

}


//근접해 있는 인스턴스를 찾았을 때
if instance_exists(inst){
//----- ▼
//근접해 있는 인스턴스를 찾았을 때 이벤트
//----- ▲
}



위와 같이 할 수 있을 겁니다.
룸에 있는 오브젝트 수 만큼 인스턴스를 체크하여, 변수 set 값이 5보다 크고, 해당 인스턴스와의 거리가

최대 거리보다 작으면, 거리를 갱신하여, 가장 근접해 있는 오브젝트를 계속 추려내는 것이지요.

그리고 모두 체크한 후, 반복문(예문의 for 문)을 끝내면, 조건에 맞는 인스턴스(예문의 inst 변수)를

찾았을 때, 그 인스턴스를 제어하는 방식입니다.


물론 예문은 근접한 인스턴스를 찾는 방식이지만, 다양한 상황을 추가하여 다른 유형의 유닛을 선택하는

방법에 응용할 수도 있을 거에요.

300x250

댓글