인프런 커뮤니티 질문&답변

Fork님의 프로필 이미지
Fork

작성한 질문수

[JS] Phaser 게임 제작 - 뱀파이어 서바이벌 클론

레벨에 따라 Attack을 강화 및 추가해보자 2

catnip 이펙트 범위가 이상하네요

해결된 질문

작성

·

157

0

디버깅으로 확인했는데, catnip의 써클 범위가 캐릭터가 이동할 때 마다 캐릭터 중심에서 살짝 어긋나는데, 캐릭터의 중심에 고정할 수 있을까요?

import Phaser from "phaser";
import Player from "../characters/Player"

export default class Catnip extends Phaser.Physics.Arcade.Sprite {
    // scene의 startingPosition 위치에 데미지 damage와 크기 scale의 Catnip을 생성합니다.
    constructor(scene, startingPosition, damage, scale) {
        super(scene, startingPosition[0], startingPosition[1], "catnip");

        // 화면 및 물리엔진에 추가합니다.
        scene.add.existing(this);
        scene.physics.world.enableBody(this);
        // Catnip은 static 공격입니다. (플레이어 주변에만 발생하고 몹으로 이동하지 않음)
        scene.m_weaponStatic.add(this);

        // 데미지를 멤버 변수로 설정해줍니다.
        this.m_damage = damage;
        // 크기, 투명도, depth를 설정해줍니다.
        this.scale = scale;
        this.alpha = 0.5;
        this.setDepth(5);
        // catnip은 동그랗게 생겼으므로 물리적 영역을 원으로 설정해줍니다.
        this.setCircle(30);
        // 애니메이션을 재생합니다.
        this.play("catnip_anim");
    }

    // 플레이어가 움직이면 Catnip도 따라 움직여야 하므로 move 메서드를 만들어주었습니다.
    move(vector) {
        this.x += vector[0] * 4;
        this.y += vector[1] * 4;
    }
}

답변 2

0

ahracho816님의 프로필 이미지
ahracho816
지식공유자

안녕하세요.

현재 이동과 관련된 코드는 PlayingScene.js의 movePlayerManager 메서드에서 관리하고 있는데, player를 이동하는 코드와 weapon을 이동하는 코드의 순서가 보장되지 않아 발생하는 문제로 생각됩니다.

movePlayerManager() {
  this.m_player.move(vector);
  this.m_weaponStatic.children.each(weapon => {
    weapon.move(vector);
  }, this);
}

다음과 같은 두 방법을 시도해보실 수 있겠습니다.

  1. player의 move 메소드 내로 weapon을 move시키는 코드를 이동시킵니다.

  2. AI 답변으로 적혀져 있는 방법대로, catnip의 move 메소드를 player의 좌표를 가져와 직접 대입하는 방식으로 변경합니다.

 

0

안녕하세요, 인프런 AI 인턴입니다.

catnip의 써클 범위가 캐릭터 중심에서 어긋나지 않고 고정되게 하려면, Catnip 클래스의 move 메소드에서 캐릭터의 위치를 직접 지정하는 방식으로 수정하는 것이 좋을 것 같습니다.

캐릭터의 위치를 Catnip의 위치로 직접 업데이트하는 예시는 다음과 같습니다:

move(playerX, playerY) {
    this.x = playerX;
    this.y = playerY;
}

이 변경을 적용한 후, 캐릭터가 움직일 때 Catnipmove 메소드를 호출하되, 캐릭터의 현재 위치인 x, y 좌표를 인수로 전달해야 합니다. 이렇게 하면 Catnip이 캐릭터의 중심에 항상 고정되어 따라가게 됩니다.

추가적으로, Player 클래스에서 캐릭터가 이동할 때 마다 Catnipmove 메소드를 호출하는 로직도 필요합니다. 예를 들어, 캐릭터가 움직일 때마다 해당 캐릭터의 x, y 위치를 Catnipmove 메소드에 전달해주면 됩니다.

이렇게 수정하면, Catnip의 써클 범위가 캐릭터가 이동할 때마다 캐릭터 중심에 고정되어 어긋나지 않게 될 것입니다.

Fork님의 프로필 이미지
Fork

작성한 질문수

질문하기