pyxen.Text

비트맵 폰트를 사용하여 Entity에 텍스트 문자열을 렌더링합니다.

텍스트 엔티티는 렌더링에 폰트 아틀라스를 사용합니다 — 각 문자는 아틀라스 텍스처에서 쿼드로 그려집니다.


생성자

Text(
    content,
    *,
    font="_default",
    color=None,
    align="left"
)

매개변수

매개변수타입설명
contentstr표시할 텍스트 문자열
fontstr폰트 에셋 이름 (기본값: 내장 폰트)
color(r, g, b, a)틴트 색상 (기본값: 흰색)
alignstr텍스트 정렬: "left", "center" 또는 "right"

content (필수)

렌더링할 텍스트 문자열입니다.

Text("Hello World")

font (선택)

사용할 폰트 에셋의 이름입니다. 생략하면 내장 기본 폰트가 사용됩니다.

Text("Score: 0", font="myfont")

폰트 에셋은 .font.json 디스크립터와 .font.png 아틀라스 이미지로 구성됩니다.


color (선택)

렌더링된 텍스트에 틴트를 적용합니다.

Text("Warning!", color=(1, 0, 0, 1))

기본값: (1.0, 1.0, 1.0, 1.0) (흰색, 완전 불투명).


align (선택)

엔티티 위치를 기준으로 수평 텍스트 정렬을 제어합니다.

Text("Centered", align="center")
값설명
"left"텍스트가 엔티티 위치에서 시작 (기본값)
"center"텍스트가 엔티티 위치를 중심으로 배치
"right"텍스트가 엔티티 위치에서 끝남

텍스트 할당

스폰 시 할당할 수 있습니다:

label = world.spawn(
    text=Text("Score: 0"),
    x=10, y=10, layer=200
)

또는 나중에:

label.text = Text("Game Over", color=(1, 0, 0, 1))

런타임에 텍스트 업데이트

엔티티를 통해 텍스트 컴포넌트에 접근하여 속성을 업데이트합니다:

label.text.content = "Score: 100"
label.text.color = (1, 1, 0, 1)
label.text.align = "center"

페이드와 색조

텍스트 엔티티의 alpha, r, g, b는 스프라이트처럼 트윈할 수 있습니다(entity.tween() 참고). 매 프레임 text.color를 설정하지 않아도 튀어나온 점수가 사라집니다:

label.tween("alpha", to=0, duration=0.4, delay=0.3)  # 잠시 뒤 점수가 사라짐
label.tween("b", to=0, duration=0.2)                 # 흰색이 노란색으로

텍스트 제거

텍스트를 제거하려면 None으로 설정합니다:

label.text = None

화면 위 또는 월드 안

텍스트 엔티티는 스프라이트처럼 월드 안에 있습니다. 카메라가 움직이면 함께 움직이고, 카메라의 줌으로 크기가 바뀝니다. 화면에 고정되는 HUD(점수, 남은 목숨, 메시지)는 텍스트를 카메라의 자식으로 생성하세요. 그러면 x 와 y 는 화면 중앙을 기준으로 측정되고, 카메라가 움직여도 화면에서 제자리에 있습니다.

cam = world.spawn(camera=Camera())
label = world.spawn(parent=cam, x=-150, y=-80, layer=200, text=Text("Score: 0"))

예제

예제는 점수를 모듈 변수가 아니라 라벨의 컴포넌트에 저장합니다.

from pyxen import *

def start():
    cam = world.spawn(camera=Camera())
    label = world.spawn(
        parent=cam, x=-150, y=-80, layer=200,
        text=Text("Score: 0", color=(1, 1, 1, 1))
    )
    label.score = {"value": 0}

def update():
    for label in world.all("score"):
        label.score.value += 1
        label.text.content = "Score: " + str(label.score.value)