강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của si2632787
si2632787

câu hỏi đã được viết

[JS] Tạo trò chơi Phaser - Bản sao sinh tồn của ma cà rồng

Hãy tăng cường và thêm Tấn công theo cấp độ 2

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

Đã giải quyết

Viết

·

234

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

Câu trả lời 2

0

ahracho님의 프로필 이미지
ahracho
Người chia sẻ kiến thức

안녕하세요.

현재 이동과 관련된 코드는 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의 써클 범위가 캐릭터가 이동할 때마다 캐릭터 중심에 고정되어 어긋나지 않게 될 것입니다.

Hình ảnh hồ sơ của si2632787
si2632787

câu hỏi đã được viết

Đặt câu hỏi