inflearn logo
강의

講義

知識共有

[JS] Phaser ゲーム制作 - ヴァンパイア・サバイバーズ風クローン

レベルに応じて攻撃を強化して追加しましょう2

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

解決済みの質問

252

Fork

投稿した質問数 4

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

javascript phaser

回答 2

0

ahracho

안녕하세요.

현재 이동과 관련된 코드는 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

communityai8509

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

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

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

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

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

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

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

3강 질문

0

18

1

74. 데이터 캐시 - 1 (이론) 강의 영상 누락

0

29

1

2강 nodejs 3단계 설명 질문

0

33

1

imagesLoaded에 관한 질문

0

19

2

useEffect와 lifecycle문의

0

26

2

physics.closest()는 중심점 기준인가요, 충돌 영역 기준인가요?

0

82

1

player, mob, background 이미지

0

63

2

이미지가 불러와지지 않습니다.

1

148

2

node 버전 문의드립니다.

1

180

2

노드.js 버전 질문

0

431

2

npm start 관련 에러 질문

0

352

2

addAttackEvent 속도가 너무 빠르면 이런 오류가 발생하네요

0

289

2

hello world 강의 질문이요~

1

413

2

npm start 에러코드가 나와 문의드립니다.

1

520

2

npm start 에러나와 문의드립니다.

2

393

2

[참고] Uncaught Error: createEmitter removed. See ParticleEmitter docs for info : 에러에 대한 해결 방법 공유

2

414

2

Phaser3 질문드립니다!!

2

759

2

모바일 크롬 브라우저에서 동작을 안하는데 PC 에서만 가능한가요 ?

1

295

1

엌ㅋㅋ 클리어를 못하실거 같다고 말씀하시는게 왜케 재밋죠

2

343

0

보스스테이지에서 멈춥니다

1

433

1

[참고] 33강 캣닢어택 강화시 버그 관련

2

607

1

배포 파이프라인

1

434

2

[참고] hello world 강의 중 에셋 사용시 baseURL 수정 필요합니다.

3

443

1

CHAPTER3.1 몹만들기

3

361

1