pyxen.GridBody

GridBody는 GridMap과 상호작용하는 그리드 기반 충돌 컴포넌트입니다.

충돌 개념은 충돌을 참조하세요.


생성자

GridBody(
    *,
    pos=None,
    size=None,
    move=None,
    tag=None,
    mask=None
)

모든 매개변수는 키워드 전용입니다.


매개변수

매개변수타입설명
pos(x, y)초기 위치 (픽셀)
size(w, h)바디 크기 (픽셀)
move(x, y)이동 벡터
tagint바디 태그
mask(int, …)충돌할 타일 태그 튜플

예시

e = world.spawn(
    name="hero",
    sprite=sprite,
    layer=LAYER_HERO,
    body=GridBody(
        pos=(64, 64),
        size=(16, 16),
        move=(0, 0),
        tag=TAG_PLAYER,
        mask=(TAG_WALL, TAG_MONSTER)
    )
)

GridBody 첨부

spawn() 시:

player = world.spawn(
    body=GridBody(pos=(32, 32), size=(16, 16))
)

또는 나중에:

entity = world.spawn()
entity.body = GridBody(size=(16, 16))

속성

move

튜플 또는 Vector2로 프레임당 이동 벡터를 설정합니다. move는 부동소수점을 허용하므로, 서브픽셀 속도로 이동할 수 있습니다:

body.move = (1, 0)      # 1 pixel/frame
body.move = (0.5, 0)    # half a pixel/frame — moves 1px every other frame

move는 프레임 간에 유지됩니다 (프레임당 속도입니다); 멈추려면 (0, 0)으로 설정하세요. 위치는 픽셀 단위로 정확하게 유지됩니다: 소수점 이동은 누적되어 한 번에 한 픽셀씩 적용되므로, 충돌과 렌더링이 선명하고 결정론적으로 유지됩니다.

move를 읽으면 Vector2를 반환합니다:

m = body.move
print(m.x, m.y)

예정된 속성

속성설명
pos바디 위치
size바디 크기
tag바디 태그
mask충돌 마스크

태그 시스템

tag

각 바디에는 하나의 태그가 있습니다:

body.tag = TAG_PLAYER

mask

마스크는 이 바디가 충돌할 태그를 정의합니다:

body.mask = (TAG_WALL, TAG_MONSTER)

GridBody + GridMap 상호작용

GridBody는 GridMap의 타일 및 다른 GridBody와 태그 필터링을 기반으로 충돌합니다.

충돌이 처리되려면 GridBody가 GridMap 엔티티의 자식이어야 합니다.


이동 예시

body = player.body

if input.keyboard.left.down:
    body.move = (-1, 0)

if input.keyboard.right.down:
    body.move = (1, 0)

최소 설정

level = world.spawn(
    map=GridMap(
        rows=10,
        columns=10,
        size=(16, 16)
    )
)

player = world.spawn(
    parent=level,
    body=GridBody(
        pos=(16, 16),
        size=(16, 16),
        tag=1,
        mask=(2,)
    )
)

일반적인 패턴: 플레이어 vs 벽

TAG_PLAYER = 1
TAG_WALL = 2

player = world.spawn(
    body=GridBody(
        pos=(32, 32),
        size=(16, 16),
        tag=TAG_PLAYER,
        mask=(TAG_WALL,)
    )
)

타일이 다음과 같이 설정되면:

map.set(row=0, column=5, tag=TAG_WALL)

플레이어가 해당 타일과 충돌합니다.