튜토리얼 2. 적 함선에 레이저 발사해보기 (1) - GameEgg/STARPOO-II GitHub Wiki

# 목차

  1. 적 함선 탐색하기
  2. 적 함선에 레이저 쏘기

# 시야 범위

STARPOO에선, 처음에는 상대 함선의 위치를 알 수 없습니다. STARPOO의 함선들은 각기 제한된 시야 반경을 갖고 있으며 해당 반경에 들어온 적 함선의 위치만 enemyShips 배열에 추가되고 함선이 밖으로 나가면 위치를 알 수 없게 됩니다. 따라서, 상대 함선의 위치를 파악하기 위해 적극적으로 움직이며 정찰을 해야 합니다.

함선을 퍼트리자!

함선을 맵의 사방으로 퍼트려봅시다.

우리는 이전 튜토리얼에서, 함선을 특정 좌표를 중심으로 회전하게 해보았습니다.

이를 응용하면, 쉽게 함선을 특정 좌표를 향해 나아가도록 할 수 있습니다.

우선, 극좌표를 기준으로 어느 곳으로 나아갈지 결정해봅시다. 배를 사방으로 퍼트려야하니, 아래의 위치를 타겟으로 정해봅시다.

var targetDegree = index * 360 / myShips.length;
var targetR = groundRadius * 0.8;

이후, 이를 배를 중심으로 한 극좌표로 변환합니다.

var targetPoint = cartesian({r:targetR,rot:targetDegree});
var polarFromShip = polarFrom(myShip,targetPoint);

이후 targetPoint를 바라보고 전진합니다.

배를 중심으로 목표 위치의 극좌표를 구했으니 이번 프레임에서 해당 방향으로 바라보기 위해 회전속도는 해당 지점과의 각도차/dt가 되어야 할 것입니다.

인자로 넣은 회전속도는 자동으로 최대 회전속도 이하로 제한됩니다.

myShip.setRotSpeed(polarFromShip.rot/dt);
myShip.setSpeed(shipMaxSpeed);

이 코드를 모든 배에 적용합시다.

코드 전문은 아래와 같습니다.


function update(){

	myShips.forEach(function(myShip,index){

		var targetDegree = index * 360 / myShips.length;
		var targetR = groundRadius * 0.8;

		var targetPoint = cartesian({r:targetR,rot:targetDegree});
		var polarFromShip = polarFrom(myShip,targetPoint);

		myShip.setRotSpeed(polarFromShip.rot / dt);
		myShip.setSpeed(polarFromShip.r / dt);
		
	});
}

해당 코드를 실행하면 함선들은 아래와 같이 도열합니다.

코드 실행 모습

적 함선 근처의 아군 배의 위에 노란색 눈 마크가 보입니다.

이는, 적 함선을 감지했다는 표시이며, 동시에 적 함선에게 감지되었음을 의미합니다.