화면
구조는 문서, 변화는 스크립트. 화면의 생김새는 client/**/ui/*.json 에 있고,
스크립트는 그것을 열어 바꿉니다. 화면을 매번 프로그램으로 짓는 엔진은 없습니다 —
그렇게 하면 에디터가 열 것이 없고, 루아를 읽지 않는 사람은 손댈 수 없습니다.
열고 집기
local screen = Chain2D.UI.load("lobby")
local status = screen.find("status") -- 없으면 오류
local maybe = screen.maybe("hint") -- 없으면 nil
screen.root -- 문서의 첫 노드
이름으로 찾습니다. 순서로 찾으면 위에 라벨 하나만 끼워 넣어도 모든 스크립트가 조용히 다른 것을 가리킵니다.
바꾸기
status:set({ text = "다시 연결하는 중", colour = { 1, 0.6, 0.4, 1 } })
status:set({ visible = false })
button:set({ onPressed = function() end })
element:destroy()
set 은 모르는 속성을 받으면 거부합니다. 조용히 무시하면 창작자는 줄을 썼고, 그
줄은 아무 일도 하지 않았고, 어디에도 그 사실이 적히지 않습니다.
직접 짓기
미리 적어 둘 수 없는 목록에서 만들어지는 화면 — 서버 목록, 인벤토리 칸 — 은 그대로 스크립트가 짓습니다.
local panel = Chain2D.UI.Frame({
anchor = "center", width = 380, height = 200,
colour = { 0.09, 0.10, 0.13, 0.95 },
})
Chain2D.UI.Text({ parent = panel, anchor = "top", y = -34, text = "제목" })
Chain2D.UI.Image({ parent = panel, image = "client/art/logo.png" })
Chain2D.UI.Button({
parent = panel, anchor = "bottom", y = 28, width = 240, height = 40,
text = "시작", onPressed = function() end,
})
속성
anchor |
topLeft top topRight left center right bottomLeft bottom bottomRight |
x y |
기준점에서 얼마나 떨어질지 |
width height |
크기 |
text fontSize |
글자와 그 크기 |
image |
릴리스 안의 그림 경로 |
colour |
{ r, g, b, a }, 0~1 |
visible |
보임. 숨긴 것의 자식은 눌리지도 않습니다 |
onPressed |
Button 만 |
parent |
어느 것 안에 놓일지 |
배치는 부모가 먼저 정해지고 자식이 그 사각형에 대해 붙습니다. 같은 부모 안에서는 나중에 선언된 것이 위에 그려지고, 눌림도 위에 있는 것이 가져갑니다.
문서 형식 자체는 화면 문서를 보세요.