강의

멘토링

로드맵

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

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

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

[JS] Làm game Phaser - Bản sao Vampire Survivors

Hãy thêm tấn công 1

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

Đã giải quyết

Viết

·

67

0

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

javascriptphaser

Câu trả lời 1

0

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

안녕하세요.
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;
},
Hình ảnh hồ sơ của hiyun
hiyun

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

Đặt câu hỏi