강의

멘토링

커뮤니티

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

not easy님의 프로필 이미지
not easy

작성한 질문수

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

Attack을 추가해보자 1

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

해결된 질문

작성

·

59

0

this.physics.closest()가 Mob과 플레이어의 거리를 계산할 때
단순히 중심 좌표 기준으로 계산되는 건지, 아니면 물리엔진에서 사용하는 충돌 영역 기준으로 계산되는 건지 헷갈립니다.

답변 1

0

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

안녕하세요.
this.physics.closest()는 단순히 중심 좌료 기준으로 계산됩니다.
Phaser에서 closest 함수가 실제로 어떻게 구현되어 있는지 링크에서 확인해보시면, 다음과 같이 source에 물리엔진 body가 있다면 body의 center(중심점)을 사용하고 있는 것을 확인하실 수 있습니다!
따라서 몹의 히트박스가 크기가 다양하다면 예상대로 동작하지 않을 확률이 크고, 그런 경우에는 edge to edge로 거리를 구하는 커스텀 로직을 작성하셔야 합니다.

closest: function (source, targets)
{
    if (!targets)
    {
        targets = this.world.bodies.entries;
    }

    var min = Number.MAX_VALUE;
    var closest = null;
    var x = source.x;
    var y = source.y;
    var len = targets.length;

    for (var i = 0; i < len; i++)
    {
        var target = targets[i];
        var body = target.body || target;

        if (source === target || source === body || source === body.gameObject || source === body.center)
        {
            continue;
        }

        var distance = DistanceSquared(x, y, body.center.x, body.center.y); // center 사용

        if (distance < min)
        {
            closest = target;
            min = distance;
        }
    }

    return closest;
},
not easy님의 프로필 이미지
not easy

작성한 질문수

질문하기