pyxen.Text
비트맵 폰트를 사용하여 Entity에 텍스트 문자열을 렌더링합니다.
텍스트 엔티티는 렌더링에 폰트 아틀라스를 사용합니다 — 각 문자는 아틀라스 텍스처에서 쿼드로 그려집니다.
생성자
Text(
content,
*,
font="_default",
color=None,
align="left"
)
매개변수
| 매개변수 | 타입 | 설명 |
|---|---|---|
content | str | 표시할 텍스트 문자열 |
font | str | 폰트 에셋 이름 (기본값: 내장 폰트) |
color | (r, g, b, a) | 틴트 색상 (기본값: 흰색) |
align | str | 텍스트 정렬: "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)