• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

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

24.04.05 00:35 작성 조회수 57

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;
    }
}

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.07

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

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

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

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

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

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

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