-
Notifications
You must be signed in to change notification settings - Fork 0
튜토리얼 2. 적 함선에 레이저 발사해보기 (1)
GameEgg edited this page Feb 27, 2019
·
13 revisions
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);
});
}
해당 코드를 실행하면 함선들은 아래와 같이 도열합니다.
적 함선 근처의 아군 배의 위에 노란색 눈 마크가 보입니다.
이는, 적 함선을 감지했다는 표시이며, 동시에 적 함선에게 감지되었음을 의미합니다.