"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Space Defender - 적을 분리하세요

Space Defender - 적을 분리하세요

2024-08-05에 게시됨
검색:124

마지막 부분에서는 플레이어의 함선을 만들고 움직이게 만들었습니다. 이 부분에서는 적을 생성하고 움직이게 만듭니다. 그러면 우리는 그들을 격추할 것이다!

적 만들기

글머리 기호를 만들 때와 비슷한 작업을 수행하겠습니다. 새로운 적을 생성할 때마다 복제할 템플릿 적을 생성하겠습니다. 또한 동시에 둘 이상이 있을 수 있으므로 배열을 통해 적군을 추적해야 합니다.

하지만 먼저 적을 생성하는 메서드를 만듭니다. createBullet 메서드 뒤에 다음 코드를 추가합니다.

let enemyTemplate: PIXI.Graphics | undefined = undefined;
function createEnemy() {
    if(!enemyTemplate) {
        enemyTemplate = new Graphics();
        enemyTemplate
            .poly([
                0, 0,
                50, 0,
                25, 25,
            ])
            .fill(0xFF6666);
    }

    const enemy = enemyTemplate.clone();
    enemy.x = 25   (Math.random() * 480) - 50;
    enemy.y = -50;

    return enemy;
}

보시다시피 createBullet 메소드와 매우 유사합니다. 새로운 적을 생성하고 싶을 때마다 복제하는 템플릿 적을 생성합니다. 그런 다음 적을 화면 상단의 임의의 x 위치에 배치합니다. 적의 모양은 플레이어의 함선과 동일하지만 빨간색이고 거꾸로 되어 있습니다.

x 및 y 속성을 설정하여 적의 스폰 위치를 지정합니다. x 속성은 25~480~50 사이의 임의의 값으로 설정되어 적이 항상 게임 화면 내에 있도록 합니다. y 속성은 -50으로 설정되어 적이 화면 바로 바깥에 있고 화면 안으로 이동하게 됩니다.

다음으로 이 메서드를 호출하여 몇 초마다 새로운 적을 생성해야 합니다.

적 생성

이를 위해 setInterval 메소드를 사용하겠습니다. 글머리 기호 배열을 정의한 위치 바로 뒤에 다음 코드를 추가합니다.

const enemies: PIXI.Graphics[] = [];

const enemySpawnInterval = 2500;
function spawnEnemy() {
    if(!document.hasFocus()) {
        return;
    }
    const enemy = createEnemy();
    enemies.push(enemy);
    app.stage.addChild(enemy);
}

setInterval(spawnEnemy, enemySpawnInterval);
spawnEnemy();

모든 적을 추적하기 위해 적이라는 새로운 배열을 만듭니다. 그런 다음 새 적을 생성하려는 빈도를 지정하는 적SpawnInterval이라는 새 변수를 만듭니다. 그런 다음 새 적을 생성하고 이를 적 배열과 스테이지에 추가하는spawnEnemy라는 새 메서드를 만듭니다. 그런 다음 setInterval 메서드를 사용하여 적SpawnInterval 밀리초마다 이 메서드를 호출합니다.

멋지네요. 이제 2.5초마다 화면 상단에 적이 생성됩니다. 하지만 그들은 아직 움직이지 않고 화면 밖에 있기 때문에 우리는 그들을 볼 수 없습니다. 문제를 해결하겠습니다.

적을 이동

게임 루프에서 적의 위치를 ​​업데이트해야 합니다. 총알의 위치를 ​​업데이트하는 바로 아래에 있는 게임 루프에 다음 코드를 추가합니다.

for(let i = 0; i  app.screen.height   50) {
        app.stage.removeChild(enemy);
        enemies.splice(i, 1);
    }
}

코드의 이 부분은 모든 적에 대해 반복하고 2.5픽셀 아래로 이동하여 위치를 업데이트하고 범위를 벗어났는지 확인합니다. 그렇다면 무대와 적 배열에서 제거합니다.

멋진! 지금 게임을 실행하면 적들이 화면 상단에 생성되어 아래로 이동하는 것을 볼 수 있습니다.

이제 그들을 격추할 시간입니다!

적을 쏘다

적의 위치를 ​​업데이트하는 바로 아래 게임 루프에 다음 코드를 추가합니다.

for(let i = 0; i  enemy.x &&
            bullet.x  enemy.y &&
            bullet.y 


코드의 이 부분은 모든 총알과 모든 적을 반복하여 총알이 적에게 맞는지 확인합니다. 그렇다면 무대와 해당 배열에서 총알과 적 모두를 제거합니다.

총알이 적을 맞힐 때 내부 루프를 중단하여 이 코드를 최적화할 수 있지만 지금은 괜찮습니다. 총알 위치 업데이트 루프와 총알 히트 확인 루프를 결합할 수도 있지만 이 튜토리얼의 명확성을 위해 별도로 유지하는 것이 좋습니다.

그리고 그게 다야! 이제 좌우로 움직이고, 총알을 쏘고, 적을 격추할 수 있는 게임이 생겼습니다. 다음 부분에서는 게임에 몇 가지 HUD 요소를 추가하고 플레이어의 점수, 레벨 및 생명을 추적할 것입니다.



이와 유사한 튜토리얼에 대해 가장 먼저 알아보려면 내 뉴스레터에 등록하는 것을 잊지 마세요.

릴리스 선언문 이 글은 https://dev.to/mrlinxed/space-defender-part-3-the-enemies-11o3?1에서 복제되었습니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3