해결된 질문
작성
·
152
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
안녕하세요.
현재 이동과 관련된 코드는 PlayingScene.js의 movePlayerManager 메서드에서 관리하고 있는데, player를 이동하는 코드와 weapon을 이동하는 코드의 순서가 보장되지 않아 발생하는 문제로 생각됩니다.
movePlayerManager() {
this.m_player.move(vector);
this.m_weaponStatic.children.each(weapon => {
weapon.move(vector);
}, this);
}
다음과 같은 두 방법을 시도해보실 수 있겠습니다.
player의 move 메소드 내로 weapon을 move시키는 코드를 이동시킵니다.
AI 답변으로 적혀져 있는 방법대로, catnip의 move 메소드를 player의 좌표를 가져와 직접 대입하는 방식으로 변경합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
catnip의 써클 범위가 캐릭터 중심에서 어긋나지 않고 고정되게 하려면, Catnip
클래스의 move
메소드에서 캐릭터의 위치를 직접 지정하는 방식으로 수정하는 것이 좋을 것 같습니다.
캐릭터의 위치를 Catnip
의 위치로 직접 업데이트하는 예시는 다음과 같습니다:
move(playerX, playerY) {
this.x = playerX;
this.y = playerY;
}
이 변경을 적용한 후, 캐릭터가 움직일 때 Catnip
의 move
메소드를 호출하되, 캐릭터의 현재 위치인 x
, y
좌표를 인수로 전달해야 합니다. 이렇게 하면 Catnip
이 캐릭터의 중심에 항상 고정되어 따라가게 됩니다.
추가적으로, Player
클래스에서 캐릭터가 이동할 때 마다 Catnip
의 move
메소드를 호출하는 로직도 필요합니다. 예를 들어, 캐릭터가 움직일 때마다 해당 캐릭터의 x
, y
위치를 Catnip
의 move
메소드에 전달해주면 됩니다.
이렇게 수정하면, Catnip
의 써클 범위가 캐릭터가 이동할 때마다 캐릭터 중심에 고정되어 어긋나지 않게 될 것입니다.