From 16cf39d644d2ef66875f66c5b2a30ebbc388888d Mon Sep 17 00:00:00 2001
From: Qwreey
Date: Wed, 22 Feb 2023 00:07:21 +0900
Subject: [PATCH] =?UTF-8?q?docs:=20=ED=95=9C=EA=B5=AD=EC=96=B4=20=EB=AC=B8?=
=?UTF-8?q?=EC=84=9C=20=ED=8A=9C=ED=86=A0=EB=A6=AC=EC=96=BC=20=EC=99=84?=
=?UTF-8?q?=EC=84=B1=EC=8B=9C=ED=82=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/kr/include/bindable/index.html | 788 ++++++++++++++++++++++++
docs/kr/include/connection/index.html | 762 +++++++++++++++++++++++
docs/kr/include/disconnecter/index.html | 769 +++++++++++++++++++++++
docs/kr/include/extend/index.html | 775 +++++++++++++++++++++++
docs/kr/include/objectList/index.html | 3 +
docs/kr/include/register/index.html | 5 +-
docs/kr/search/search_index.json | 2 +-
docs/kr/sitemap.xml | 20 +
docs/kr/sitemap.xml.gz | Bin 426 -> 452 bytes
docs/kr/tutorial/10_signal/index.html | 204 +++++-
docs/kr/tutorial/11_extend/index.html | 314 +++++++++-
docs/kr/tutorial/2_mount/index.html | 2 +-
docs/kr/tutorial/3_getObject/index.html | 98 +--
docs/kr/tutorial/4_style/index.html | 49 +-
docs/kr/tutorial/8_register/index.html | 5 +-
docs/kr/tutorial/9_lang/index.html | 42 +-
md/kr/include/bindable.md | 34 +
md/kr/include/connection.md | 8 +
md/kr/include/disconnecter.md | 14 +
md/kr/include/extend.md | 31 +
md/kr/include/objectList.md | 6 +
md/kr/include/register.md | 10 +-
md/kr/tutorial/10_signal.md | 68 +-
md/kr/tutorial/11_extend.md | 158 +++++
md/kr/tutorial/2_mount.md | 2 +-
md/kr/tutorial/3_getObject.md | 15 +-
md/kr/tutorial/4_style.md | 12 +-
md/kr/tutorial/6_tween.md | 2 +
md/kr/tutorial/9_lang.md | 109 ++--
src/class.lua | 9 +-
src/signal.lua | 30 +-
31 files changed, 4210 insertions(+), 136 deletions(-)
create mode 100644 docs/kr/include/bindable/index.html
create mode 100644 docs/kr/include/connection/index.html
create mode 100644 docs/kr/include/disconnecter/index.html
create mode 100644 docs/kr/include/extend/index.html
create mode 100644 md/kr/include/bindable.md
create mode 100644 md/kr/include/connection.md
create mode 100644 md/kr/include/disconnecter.md
create mode 100644 md/kr/include/extend.md
diff --git a/docs/kr/include/bindable/index.html b/docs/kr/include/bindable/index.html
new file mode 100644
index 0000000..7bf0917
--- /dev/null
+++ b/docs/kr/include/bindable/index.html
@@ -0,0 +1,788 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bindable - Quad 한국어 문서
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 홈
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 튜토리얼
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 레퍼런스
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bindable
+
+: Fire (... any )
+
+등록된 연결들을 실행하고, Wait 을 풀어줍니다.
+
+
+: Wait () -> (... any )
+
+Fire 가 호출될 때 까지 기다립니다. Fire 에 사용된 값이 반환됩니다.
+
+
+: Connect ((... any ) -> ()) -> Connection
+
+Fire 가 호출 될 때 함수가 실행되도록 만듭니다. Fire 에 사용된 값이 호출 인자로 사용됩니다. 연결을 끊을 수 있도록 Connection 이 제공됩니다.
+
+
+: Once ((... any ) -> ()) -> Connection
+
+Connect 와 유사하지만, Fire 가 한번 호출된 뒤 연결이 끊어집니다/
+
+
+: CheckConnected ( func ) -> boolean
+
+함수가 이미 등록되어 있는지 여부를 반환합니다.
+
+
+: DisconnectAll ()
+
+모든 연결을 끊습니다. Wait 으로 기다리고 있는 곳에는 nil 을 반환합니다.
+
+
+: Destroy ()
+
+: DisconnectAll () 를 수행한 후, 객체를 더이상 사용할 수 없도록 만듭니다.
+id 가 등록되어 있는경우 저장소에서 파기하게 됩니다.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 맨위로
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/kr/include/connection/index.html b/docs/kr/include/connection/index.html
new file mode 100644
index 0000000..4edda0e
--- /dev/null
+++ b/docs/kr/include/connection/index.html
@@ -0,0 +1,762 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Connection - Quad 한국어 문서
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 홈
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 튜토리얼
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 레퍼런스
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Connection
+
+: Disconnect ()
+
+연결을 끊습니다. Fire 가 호출되더라도 Connect 혹은 Once 에 사용된 함수가 실행되지 않습니다.
+
+
+: Destroy ()
+
+: Disconnect () 의 별칭입니다.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 맨위로
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/kr/include/disconnecter/index.html b/docs/kr/include/disconnecter/index.html
new file mode 100644
index 0000000..5c28945
--- /dev/null
+++ b/docs/kr/include/disconnecter/index.html
@@ -0,0 +1,769 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Disconnecter - Quad 한국어 문서
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 홈
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 튜토리얼
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 레퍼런스
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Disconnecter
+
+: Add ( connection : Connection | RBXScriptConnection )
+
+connection을 리스트에 추가합니다. 나중에 :Disconnect를 호출하면 추가된 연결이 파기됩니다.
+
+
+: Disconnect ()
+
+추가된 모든 연결에 Disconnect() 를 수행합니다. 이 호출 후에 추가된 연결은 모두 사라지며. 이 요청 후에도 다시 :Add 를 사용할 수 있습니다
+Disconnecter 를 완전히 사용하지 못하도록 하려면 :Destroy 를 호출하세요
+
+
+: Destroy ()
+
+: Disconnect () 를 수행한 후, 객체를 더이상 사용할 수 없도록 만듭니다.
+id 가 등록되어 있는경우 저장소에서 파기하게 됩니다.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 맨위로
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/kr/include/extend/index.html b/docs/kr/include/extend/index.html
new file mode 100644
index 0000000..a8dde76
--- /dev/null
+++ b/docs/kr/include/extend/index.html
@@ -0,0 +1,775 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extend - Quad 한국어 문서
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 홈
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 튜토리얼
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 레퍼런스
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extend
+
+self(name:string)
+
+Extend 메소드 전역에서 사용가능합니다. 링커를 만들며, PropertyChangedSignal 를 이어주거나, self 에 원하는 오브젝트를 넣는 용도로 사용됩니다. 자세한 정보는 Render 를 확인해주세요.
+
+
+REQUIRED :Render(props:valueStore)
+
+화면에 그려지는 UI 를 만들어지게 하는 함수입니다. Extend 가 그려지려면 무조건 있어야합니다.
+이 오브젝트를 그리는데 들어간 프로퍼티 목록을 첫번째 인자로 줍니다. 레지스터 문법이 사용될 수 있습니다.
+=== 예제
+
+```
+
+OPTION AfterRender
+Getter Setter
+Update
+GetPropertyChangedSignal
+EmitPropertyChangedSignal
+Unload
+self()
+UpdateTriggers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 맨위로
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/kr/include/objectList/index.html b/docs/kr/include/objectList/index.html
index ab7ab85..48ca1be 100644
--- a/docs/kr/include/objectList/index.html
+++ b/docs/kr/include/objectList/index.html
@@ -671,15 +671,18 @@
일반적인 반복입니다. for 를 사용하는것과 효과가 같으나 함수를 이용합니다
+
: EachAsync (( item : any , index : number ) -> ())
반환을 기다리지 않고 바로바로 다음 아이템으로 넘어갑니다.
코루틴이 이용됩니다. wrap() 코루틴을 모르거나, 필요성이 없는경우 일반적으로 : Each 를 사용해도 됩니다
+
: IsEmpty ()
이 ObjectList 가 비어있는지 여부를 반환합니다.
+
: Remove ( indexOrItem : number | any )
objectList 에서 해당하는 오브젝트를 제거합니다.
diff --git a/docs/kr/include/register/index.html b/docs/kr/include/register/index.html
index 2a93170..e81ef45 100644
--- a/docs/kr/include/register/index.html
+++ b/docs/kr/include/register/index.html
@@ -672,7 +672,6 @@
값에 더하기를 취합니다. 음수형태가 제공되는 경우 빼기 처럼 작동합니다.
number, Udim, UDim2, Color3, Vector2 등 더할 수 있는 모든것을 사용할 수 있습니다
-주의 : 구조의 복잡성을 피하고자, 여러번 호출시 가장 마지막 호출된 것만 사용됩니다
1
2
3
@@ -715,6 +714,10 @@
task . wait ( 2 )
end
+
+주의
+구조의 복잡성을 피하고자, 여러번 호출시 가장 마지막 호출된 것만 사용됩니다
+
: With (( store : valueStore , newValue : any , key : string ) -> ()) -> register
diff --git a/docs/kr/search/search_index.json b/docs/kr/search/search_index.json
index 9f65551..2268597 100644
--- a/docs/kr/search/search_index.json
+++ b/docs/kr/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":[" "]},"docs":[{"location":"","title":"Quad","text":"\ucc98\uc74c\uc624\uc168\ub098\uc694? \ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c\ub97c \uc77d\uc5b4\ubcf4\uc138\uc694! \ucc98\uc74c\ubd80\ud130 \ucc28\uadfc\ucc28\uadfc Quad \ubaa8\ub4c8\uc744 \uc815\ubcf5\ud560 \uc218 \uc788\uc5b4\uc694
"},{"location":"#_1","title":"\ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c \ubaa9\ucc28","text":""},{"location":"#api","title":"API \ub808\ud37c\ub7f0\uc2a4","text":"class __call, import class extend private ~~make~~
event __call prop created createdSync disconnecter private ~~bind~~
mount __call mount => mountClass|mountsClass class mountClass|mountsClass
store getObject getObjects => objectList addObject class objectList class store
style private ~~parseStyles~~ __call new
tween (from @qwreey75:AdvancedTween)
"},{"location":"#_2","title":"\uc9c4\ud589\uc911\uc774\uac70\ub098 \uac80\ud1a0\uc911","text":""},{"location":"#spring","title":"Spring","text":"Spring \ubb3c\ub9ac \uacc4\uc0b0\uc744 UI \uc560\ub2c8\uba54\uc774\uc158\uc5d0 \uc801\uc6a9\ud569\ub2c8\ub2e4 WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#quad-debuger","title":"Quad Debuger","text":"Register \uc758 \uc0c1\ud0dc\uc640 Store \uc758 \uac12, Class \uc758 \ub3d9\uc791 \uc5ec\ubd80 \ub4f1 Quad \uc758 \uc5ec\ub7ec \uc790\uc6d0\uc744 \uae34\ubc00\ud558\uac8c \ub514\ubc84\uadf8\ud569\ub2c8\ub2e4. WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#selection","title":"Selection","text":"Tab \ud0a4\ub4f1\uc73c\ub85c \ubc84\ud2bc \uc120\ud0dd\ud558\uae30 (... \uac00\ub2a5\ud568?) WIP. \uac80\ud1a0\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#quad-component-studio","title":"Quad Component Studio","text":"\ub208\uc5d0 \ubcf4\uc774\ub294 \uc6cc\uc9c0\uc6cc\uadf8\uc2dd \ud3b8\uc9d1\uae30\ub97c \uc774\uc6a9\ud574 Quad Class \ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#quad-webrender","title":"Quad WebRender","text":"HTML, CSS, JS \ub85c\uc368 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ubcc0\ud615\ud574 \uc2a4\ud29c\ub514\uc624 \uc5c6\uc774 \uac1c\ubc1c\ud558\ub294 \uac00\ubcbc\uc6b4 \uac1c\ubc1c\ubc95\uc785\ub2c8\ub2e4. WIP. \uac80\ud1a0\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"changelogs/","title":"\ubc84\uc804 \ubc88\uacbd\uc0ac\ud56d","text":""},{"location":"changelogs/#222","title":"2.22","text":"\ub354\uc774\uc0c1 Event.Prop \uac00 \ucc98\uc74c \uc0dd\uc131\uc2dc \uc2e4\ud589\ub418\ub294 \uc77c\uc774 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#221","title":"2.21","text":"Linker \uac00 \uc774\uc81c \ud074\ub798\uc2a4 \uc548 \ud074\ub798\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ub420 \uc218 \uc788\ub3c4\ub85d \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#220","title":"2.20","text":"Docments \uac00 \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub9ce\uc740\uc591\uc758 \uc0c8\ub85c\uc6b4 \ud29c\ud1a0\ub9ac\uc5bc\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4. Mkdocs \ud14c\ub9c8\uc640 \uc5ec\ub7ec\uac00\uc9c0 \uc124\uc815\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c Makefile \uc744 \ud1b5\ud574\uc11c rojo build \uc640 mkdocs build \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#219","title":"2.19","text":"Linker \uac1d\uccb4\uac00 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c GetPropertyChangedSignal \uc640, self \uc5d0 \ud2b9\uc815 \uc624\ube0c\uc81d\ud2b8 \ud639\uc740 \uc774\ubca4\ud2b8\ub97c \uc5f0\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#218","title":"2.18","text":"\uc774\uc81c \ub354\uc774\uc0c1 GC \uc5d0 \uc758\ud574 Store \uc758 Instance \uac12\uc774 \uc190\uc2e4\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#217","title":"2.17","text":"Tween \uc758 CallBack \ub4f1\ub85d \uc2dc \uc8fc\uc5b8\uc9c0\ub294 \ud30c\ub77c\uba54\ud130\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ub354\uc774\uc0c1 ~ \ubb38\uc774 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#215-breaking-changes","title":"2.15 BREAKING CHANGES","text":"\uc774\uc81c Lang \uc5d0\uc11c CurrentLocale, FailedMessage \uc744 \ubcc0\uacbd\ud558\uba74 \uc790\ub3d9\uc73c\ub85c \ubcc0\uacbd\uc0ac\ud56d\uc774 \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4. \ub610\ud55c \uc77c\ubd80 \ud544\ub4dc\uc758 \ub124\uc774\ubc0d\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#214","title":"2.14","text":"Lang \ubaa8\ub4c8\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. register \ub97c \uc0ac\uc6a9\ud574 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ub2e4\uc911\uc5b8\uc5b4 \uc9c0\uc6d0\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#213","title":"2.13","text":"Signal \ubaa8\ub4c8\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c Class.Extend \uc5d0\uc11c GetPropertyChangedSignal \uacfc EmitPropertyChangedSignal \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#212","title":"2.12","text":"Mount \ubc18\ud658 \uac1d\uccb4\uc5d0 Add \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d Mount \uac1d\uccb4\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#211","title":"2.11","text":"Store.GetObjects \uc5d0 \uc774\uc81c & \ubb38\ubc95\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#29","title":"2.9","text":"PreloadAsync \ub97c \ud1b5\ud574 \uc774\uc81c round.lua \uc5d0\uc11c \ub77c\uc6b4\ub4dc \uc774\ubbf8\uc9c0\ub97c \ubbf8\ub9ac \ub85c\ub4dc\ud569\ub2c8\ub2e4.
"},{"location":"changelogs/#28","title":"2.8","text":"\ubc18\ud658 \uad00\ub828 \ucf54\ub4dc\uac00 exports \ub85c \uc774\uc8fc\ub418\uc5c8\uc73c\uba70. init.lua \uc5d0\uc11c\ub294 \uc790\ub3d9\uc801\uc73c\ub85c types \ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.
"},{"location":"changelogs/#27","title":"2.7","text":"\uc774\uc81c types \ub97c \uc644\uc804\ud788 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc9c1\uc811 \ubd88\ub7ec\uc640 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#2126-breaking-changes","title":"2.1~2.6 BREAKING CHANGES","text":"\ubaa8\ub4e0 \ubaa8\ub4c8\uc758 \ud544\ub4dc\uc758 \uc774\ub984\uc774 \ubcc0\uacbd\ub418\uc5c8\uc73c\uba70, \ubaa8\ub4e0 \ud074\ub798\uc2a4\ub4e4\uc774 \uae30\ubcf8\uc801\uc73c\ub85c \ub300\ubb38\uc790 \uc2dc\uc791 \ub124\uc774\ubc0d\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \uba85\uba85\uaddc\uce59\uc744 \ubcc0\uacbd\ud588\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#20","title":"2.0","text":"\ubc84\uc804 \ud310\uc62c\ub9bc, BREAKING CHANGES \ub97c \uc704\ud574 \ubc84\uc804\uc744 \ud310\uc62c\ub9bc \ud558\uc600\uc2b5\ub2c8\ub2e4.
"},{"location":"license/","title":"\ub77c\uc774\uc120\uc2a4","text":"KoreanEnglish qwreeykawaii license v1.3\nCopyright 2023. Qwreey [qwreey75@gmail.com]\n\n\uc774 \ub77c\uc774\uc120\uc2a4\ub294 DBAD \ub77c\uc774\uc120\uc2a4\ub97c \uae30\ubc18\uc73c\ub85c \ud569\ub2c8\ub2e4.\n\ub204\uad6c\ub4e0\uc9c0 \uc774 \ub77c\uc774\uc120\uc2a4 \ubb38\uc11c\uc758 \uc6d0\ubcf8 \ud639\uc740 \uc218\uc815\ubcf8\uc744\n\ubcf5\uc0ac, \ud3b8\uc9d1, \ubc30\ud3ec \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\nqwreeykawaii \ub77c\uc774\uc120\uc2a4\uc758 \ubcf5\uc0ac \ubc30\ud3ec \ubc0f \uc218\uc815\uc5d0\n\uad00\ud55c \uaddc\uc815\uacfc \uc870\uac74.\n\n1. \ub2f9\uc2e0\uc740 \uc774 \uadc0\uc5ec\uc6b4 \ucc3d\uc791\ubb3c\uc744 \uac00\uc9c0\uace0 \uc5b4\ub5a0\ud55c\n\uac83\uc774\ub4e0 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e8, \ubb34\ub840\ud558\uc9c0 \ub9c8\uc138\uc694.\n\ubb34\ub840\ud55c \ud589\ub3d9\uc740 \ud1b5\uc0c1\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\n\n\uac00. \uadc0\uc5ec\uc6b4 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc5b4\ub5a0\ud55c \uac00\uacf5\ub3c4 \uc5c6\uc774\n \ubcf5\uc81c\ud558\uac70\ub098, \uc774\ub984\ub9cc \ubc14\uafb8\ub294 \uac83\uc740 \ubb34\ub840\ud558\uba70\n \ub178\uace8\uc801\uc778 \uc800\uc791\uad8c \uce68\ud574\uc785\ub2c8\ub2e4.\n\ub098. \uadc0\uc5ec\uc6b4 \uc774 \ucc3d\uc791\ubb3c\uc5d0 \uc74c\ub780\uc131 \ud639\uc740 \uc720\ud574\ud55c\n \ucf58\ud150\uce20\ub97c \ud3ec\ud568\uc2dc\ud0a4\ub294 \uac83\uc740 \ubb34\ub840\ud569\ub2c8\ub2e4.\n \uadc0\uc5ec\uc6b4 \ucf58\ud150\uce20\ub85c \ub2e4\ub978\uc774\ub97c \ud574\uce58\uc9c0 \ub9c8\uc2ed\uc2dc\uc624.\n\n\uadf8\ub7ec\ub098 \uc774\uc5d0\ub9cc \uad6d\ud55c\ub418\ub294\uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4.\n\ubb34\uc5c7\ubcf4\ub2e4\ub3c4, \uadc0\uc5ec\uc6b4 \ud0c0\uc778\uc744 \uc0c1\ucc98\uc8fc\uc9c0 \ub9c8\uc138\uc694.\n\n2. \ub2f9\uc2e0\uc774 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc0ac\uc6a9\ud574 \ub9ce\uc740 \uc774\ub4dd\uc744 \ubcf8\n\uacbd\uc6b0, \uadc0\uc5ec\uc6b4 \ucc3d\uc791\uc790\uc5d0\uac8c \uc0ac\ub791\uc744 \ubc30\ud478\uc138\uc694.\n\uc778\uac04\uc801\uc778 \uc0ac\ub78c\uc740 \uadc0\uc5ec\uc6b4 \uc0ac\ub78c\ub4e4\uc744 \uc678\uba74\ud558\uc9c0\n\uc54a\uc2b5\ub2c8\ub2e4. \ub2f9\uc2e0\uc758 \ucee4\ud53c \ud55c\uc794\uc744 \ub098\ub220\uc8fc\uc138\uc694.\n\n3. \uc774 \ucc3d\uc791\ubb3c\uc740 \uc5b4\ub5a0\ud55c \ubcf4\uc99d \uc5c6\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.\n\uc774 \ucc3d\uc791\ubb3c\uc744 \uc0ac\uc6a9\ud558\ub2e4, \ucc3d\uc791\uc790\uc758 \uadc0\uc5ec\uc6b4\n\uc2e4\uc218\ub85c \uc778\ud574 \ubb34\uc5b8\uac00 \uc798\ubabb\ub418\uc5c8\ub2e4\uba74, \ubb38\uc81c\ub97c \uc9c1\uc811\n\ud574\uacb0\ud558\uc138\uc694. \ubb34\ub840\ud558\uc9c0 \uc54a\uc740 \uc0ac\ub78c\uc740 \uc801\uc5b4\ub3c4\n\uadc0\uc5ec\uc6b4 \ud0c0\uc778\ub4e4\uc744 \ube44\ub09c\ud558\uac70\ub098 \ubaa8\uc695\ud558\uc9c0\ub294 \uc54a\uc73c\uba70\n\uc218\uc815\ubcf8\uc744 \uc81c\ucd9c\ud558\uac70\ub098 \ubc84\uadf8\ub9ac\ud3ec\ud2b8\ub97c \uc81c\ucd9c \ud560\n\uac83\uc785\ub2c8\ub2e4.\n\n4. \ub2f9\uc2e0\uc774 \uc774 \uadc0\uc5ec\uc6b4 \ucc3d\uc791\ubb3c\uc744 \ud65c\uc6a9\ud574 \ub2e4\ub978 \ucc3d\uc791\ubb3c\n\uc744 \ub9cc\ub4e4\uace0 \uc2f6\uc740 \uacbd\uc6b0 \uc801\uc5b4\ub3c4 \uc0ac\uc6a9\ud588\ub2e4\ub294 \uace0\uc9c0\ub294\n\ub0a8\uaca8\uc8fc\uc138\uc694. \uadc0\uc5ec\uc6b4 \ucc3d\uc791\uc790\ub4e4\uc740 \uc790\uc2e0\uc758 \ucc3d\uc791\ubb3c\uc774\n\uc88b\uc740\uacf3\uc5d0 \uc0ac\uc6a9\ub418\uc5c8\uc74c\uc744 \uae30\ubed0\ud560 \uac83\uc785\ub2c8\ub2e4.\n* \uc774\ub294 \uad8c\uace0 \uc0ac\ud56d\uc785\ub2c8\ub2e4. \ud544\uc218\uac00 \uc544\ub2c8\uba70 \ubd88\uac00\ud53c\ud55c\n \uacbd\uc6b0 \ubb34\uc2dc\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n\n5. \ub7ec\uc2dc\uc544 \uad6d\uc801\uc758 \uc774\ub4e4\uc740 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc601\ub9ac \ubaa9\uc801\uc73c\ub85c\n\uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. - \uc6b0\ub9ac\ub294 \uc804\uc7c1\uc790\uae08\uc744\n\uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uac19\uc740 \uc774\uc720\ub85c\uc368, \uc804\uc7c1\uc774 \uc9c0\uc6d0\ub420 \uc218 \uc788\ub294 \uacf3\uc5d0\uc11c\uc758\n\uc774 \ucc3d\uc791\ubb3c \uc0ac\uc6a9\uc744 \ud5c8\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n qwreeykawaii license v1.3\n\nCopyright 2023. Qwreey [qwreey75@gmail.com]\n\nThis license is based on DBAD license.\nEveryone is permitted to copy and distribute\nverbatim or modified copies of this license\ndocument.\n\nTERMS, AND CONDITIONS FOR COPYING,\nDISTRIBUTION, AND MODIFICATION\n\n1. You can do anything with this original work,\nbut don't be rude\n\nIn general, being rude includes below\n\nFirst. Do not copy these cute works without\n any modification. changing the name\n only is outright copyright infringement\nSecond. Do not add some harmful or NSFW content.\n It's very rude and may harm others\n\nBeing rude is not limited to these instances.\nAbove all, don't hurt cute people\n\n2. If you get any benefit or profit from these cute\nworks, Share the love. A polite person may share\nthe love with cute people.\n3. These cute works are provided with no warranty.\nIf something goes wrong due to the creator's cute\nmistake, Fix it yourself. A polite person may\nsubmit the fix or bug report.\n4. If you create something with these works, Leave\nthe original creator's name in your work.\nthe cute creator will be happy if their works are\nused for good.\n* This is a recommendation. Not required.\n5. Russian nationality can not use this creation for\ncommercial purposes. \u2014 We do not support the war.\nSame reason, This creation cannot be used where\nit can support the war.\n "},{"location":"include/direction/","title":"Direction","text":"Out \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.
In \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.
InOut \uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.
"},{"location":"include/easings/","title":"Easings","text":" \ubaa8\ub4e0 Easing \uc740 \uc5ec\uae30\uc5d0\uc11c \uc9c1\uc811\uc801\uc73c\ub85c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
Linear
\uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615 \ud568\uc218\uc785\ub2c8\ub2e4 i=x, x=0 to 1
Quint
5 \uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. Quart \ubcf4\ub2e4 \uac00\ud30c\ub978 \uac1c\ud615\uc744 \uac00\uc84c\uc2b5\ub2c8\ub2e4 (^5) i=1-(1-x)^5, x=0 to 1
Quart
\ub124\uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. Cubic \ubcf4\ub2e4 \uac00\ud30c\ub978 \uac1c\ud615\uc744 \uac00\uc84c\uc2b5\ub2c8\ub2e4 (^4) i=1-(1-x)^4, x=0 to 1
Cubic
\uc138\uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. Quad \ubcf4\ub2e4 \uac00\ud30c\ub978 \uac1c\ud615\uc744 \uac00\uc84c\uc2b5\ub2c8\ub2e4 (^3) i=1-(1-x)^3, x=0 to 1
Quad
\uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. (^2) i=1-(1-x)^2, x=0 to 1
Expo
\uc9c0\uc218\ud615 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. \ub9e4\uc6b0 \uac00\ud30c\ub978 \uac1c\ud615\uc744 \uac00\uc84c\uc2b5\ub2c8\ub2e4. i=1-2^(-10*x), x=0 to 1
Sin
\uc0ac\uc778 \ud30c\ud615 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. i=sin(x*pi/2), x=0 to 1
Circle
\uc0ac\ubd84\uc6d0 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. i=sqrt(1-(1-x)^2), x=0 to 1
Back
\uc2dc\uc791\uc2dc \ub4a4\ub85c \uc774\ub3d9\uc774 \uc788\ub294 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
Elastic
\ud0c4\uc131\uc744 \uac00\uc9c0\ub294 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
Bounce
\ud280\uc5b4\uc624\ub984\uc744 \uac00\uc9c0\ub294 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
TODO: \uc560\ub2c8\uba54\uc774\uc158 \ubbf8\ub9ac\ubcf4\uae30 \uc601\uc0c1 \ucd94\uac00
"},{"location":"include/events/","title":"Events","text":"Event(name:string)
\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 \uc774\ubca4\ud2b8\ub4e4\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4, MouseEnter, MouseLeave, MouseButton1Down, MouseButton1Up \ub4f1\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4 \uae30\ubcf8\uc801\uc73c\ub85c \ub85c\ube14\ub85d\uc2a4\uc758 \uae30\ubcf8 \uc774\ubca4\ud2b8\ub4e4\uacfc \ub2e4\ub974\uac8c, \uccab\ubc88\uc9f8 \uc778\uc790\ub85c self \ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
\uc6a9\ubc95\uc608\uc81c - \ubc84\ud2bc\ud074\ub9ad Frame {\n [Event \"MouseEnter\"] = function (self)\n print(self.Name .. \"\uc5d0 \ub9c8\uc6b0\uc2a4\uac00 \uc62c\ub77c\uc654\uc2b5\ub2c8\ub2e4\")\n end;\n}\n local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal TextButton = Class \"TextButton\"\n\nTextButton \"mainButton\" {\n Size = UDim2.fromOffset(200,200);\n [Event \"MouseEnter\"] = function (self)\n print(\"\ubc84\ud2bc\uc774 \ud074\ub9ad\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n end;\n}\nMount(ScreenGUI, Store.GetObject(\"mainButton\"))\n Event.Created
\uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub418\uc5c8\uc744 \ub54c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uc778\uc790\ub85c self \ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nFrame {\n [Event.Created] = function (self)\n print(self.Name .. \"\uc774 \uc0dd\uc131\ub418\uc5c8\uc5b4\uc694\")\n end;\n}\n \uc8fc\uc758 Event.Created \uac00 \uc2e4\ud589\ub420 \ub54c\ub294 Parent \uac12\uc774 \uc815\ud574\uc9c0\uc9c0 \uc54a\uc558\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. self.Parent \ub294 \uc811\uadfc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4. Class.Extend \uc5d0\uc11c\ub294 AfterRender \ub97c \uc774\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.
Event.CreatedAsync
Event.Created \uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc, \ucf54\ub8e8\ud2f4 \uc548\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4. objectList:EachAsync() \ucc98\ub7fc \ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nFrame {\n Frame {\n Name = \"A\";\n [Event.CreatedAsync] = function (self)\n -- \uc774 \ud568\uc218\uac00 \ub05d\ub098\uc9c0 \uc54a\ub354\ub77c\ub3c4 \ub2e4\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \uc218 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4\n task.wait(5)\n end;\n };\n Frame {\n Name = \"B\";\n [Event.Created] = function (self)\n print(self.Name .. \"\uac00 \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n end;\n };\n}\n \uc8fc\uc758 Event.CreatedAsync \uac00 \uc2e4\ud589\ub420 \ub54c\ub294 Parent \uac12\uc774 \uc815\ud574\uc9c0\uc9c0 \uc54a\uc558\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. self.Parent \ub294 \uc811\uadfc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4.
Event.Prop(propertyName:string)
\ud504\ub85c\ud37c\ud2f0 \uac12\uc774 \ubcc0\uacbd\ub428\uc744 \uc5f0\uacb0\ud569\ub2c8\ub2e4.
-- \uc6a9\ubc95\nTextBox {\n Text = \"\uc544\ubb34\uac70\ub098 \uc785\ub825\ud558\uc138\uc694\";\n [Event.Prop \"Text\"] = function (self,text)\n -- \ud3b8\uc758\uc0c1\uc758 \uc774\uc720\ub85c \ubcc0\uacbd\ub41c \uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4\n print(text)\n end;\n}\n "},{"location":"include/locales/","title":"Locales","text":"Default (default) English (en_us) Spanish (es_es) French (fr_fr) Indonesian (id_id) Italian (it_it) Japanese (ja_jp) Korean (ko_kr) Russian (ru_ru) Thai (th_th) Turkish (tr_tr) Vietnamese (vi_vn) Portuguese (pt_br) German (de_de) ChineseSimplified (zh_cn) ChineseTraditional (zh_tw) Bulgarian (bg_bg) Bengali (bn_bd) Czech (cs_cz) Danish (da_dk) Greek (el_gr) Estonian (et_ee) Finnish (fi_fi) Hindi (hi_in) Croatian (hr_hr) Hungarian (hu_hu) Georgian (ka_ge) Kazakh (kk_kz) Khmer (km_kh) Lithuanian (lt_lt) Latvian (lv_lv) Malay (ms_my) Burmese (my_mm) Bokmal (nb_no) Dutch (nl_nl) Filipino (fil_ph) Polish (pl_pl) Romanian (ro_ro) Ukrainian (uk_ua) Sinhala (si_lk) Slovak (sk_sk) Slovenian (sl_sl) Albanian (sq_al) Bosnian (bs_ba) Serbian (sr_rs) Swedish (sv_se) Arabic (ar_001)
"},{"location":"include/mounts/","title":"Mounts","text":":Unmount()
\uc774\ub807\uac8c \ud558\uba74 \ub9c8\uc6b4\ud2b8\ub41c Instance \ub97c \uc9c0\uc6cc\ubc84\ub9bd\ub2c8\ub2e4. Quad \ub294 \uc548\uc804\ud55c \uba54\ubaa8\ub9ac \uad00\ub9ac\ub97c \uc704\ud574 gc \uc758 \uae30\ub2a5\uc5d0 \uc758\uc874\ud558\ubbc0\ub85c, gc \uc2dc\uac04\ucc28\ub85c \uc778\ud574 Store.GetObject \uc5d0\uc11c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0ac\ub77c\uc9c0\ub294\ub370 \uc2dc\uac04\uc774 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui,mainFrame)\n\nlocal childFrame = Frame {}\nlocal childFrameMount = Mount(mainFrame,childFrame)\nchildFrameMount:Unmount()\n-- childFrame \uc740 \ub2e8\uc21c\ud788 .Parent = nil \ub418\ub294 \uac83\uc744 \ub118\uc5b4 \uba54\ubaa8\ub9ac\uc5d0\uc11c \uc0ac\ub77c\uc9d1\ub2c8\ub2e4\n-- \uc989, Destroy() \uac00 \ud638\ucd9c\ub429\ub2c8\ub2e4\n :Add(item:any)
Mount \uc5d0 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ucc98\uc74c \uc124\uc815\ud55c to \uac12\uc744 \ub530\ub77c \ubd80\ubaa8\uac00 \uacb0\uc815\ub429\ub2c8\ub2e4.
\uc774 \ub3d9\uc791\uc740 \ub9ac\uc2a4\ud2b8\ub97c \ub9cc\ub4e4 \ub54c \uc720\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc\ub85c\ub4dc \ub3d9\uc791\uc2dc \uc9c1\uc811 \uc81c\uac70\uac00 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui, mainFrame)\n\nlocal lastListMount = Mount(mainFrame)\nlocal function refreshList()\n lastListMount:Unmount() -- \uc774\uc804 children \uc744 \uc54c\uc544\uc11c \uc81c\uac70\ud569\ub2c8\ub2e4\n for i = 1,10 do\n lastListMount:Add(Frame { Name = tostring(i) })\n end\nend\n\ntask.spawn(function()\n while true do\n refreshList()\n task.wait(2)\n end\nend)\n \ub2e4\uc74c\uacfc \uac19\uc774 \uc774\uc804 children \uc744 \uac04\uc811\uc801\uc73c\ub85c \uc81c\uac70\ud558\uace0 \uc0c8\ub85c\uc6b4 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e8 ScrollFrame \uc758 \uacbd\uc6b0 CanvasPosition\uc774 \ucd08\uae30\ud654 \ub418\uc5b4\ubc84\ub9ac\ubbc0\ub85c \uc790\uc2dd\ub4e4\uc744 :Unmount() \ud558\uae30 \uc804\uc5d0 \uc704\uce58\ub97c \uc800\uc7a5\ud558\uace0 \ub2e4\uc2dc \ubd88\ub7ec\uc640\uc57c \ud569\ub2c8\ub2e4
"},{"location":"include/objectList/","title":"objectList","text":":Each((item:any, index:number)->())
\uc77c\ubc18\uc801\uc778 \ubc18\ubcf5\uc785\ub2c8\ub2e4. for \ub97c \uc0ac\uc6a9\ud558\ub294\uac83\uacfc \ud6a8\uacfc\uac00 \uac19\uc73c\ub098 \ud568\uc218\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4
:EachAsync((item:any, index:number)->())
\ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uace0 \ubc14\ub85c\ubc14\ub85c \ub2e4\uc74c \uc544\uc774\ud15c\uc73c\ub85c \ub118\uc5b4\uac11\ub2c8\ub2e4. \ucf54\ub8e8\ud2f4\uc774 \uc774\uc6a9\ub429\ub2c8\ub2e4. wrap() \ucf54\ub8e8\ud2f4\uc744 \ubaa8\ub974\uac70\ub098, \ud544\uc694\uc131\uc774 \uc5c6\ub294\uacbd\uc6b0 \uc77c\ubc18\uc801\uc73c\ub85c :Each \ub97c \uc0ac\uc6a9\ud574\ub3c4 \ub429\ub2c8\ub2e4
:IsEmpty()
\uc774 ObjectList \uac00 \ube44\uc5b4\uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.
:Remove(indexOrItem:number|any)
objectList \uc5d0\uc11c \ud574\ub2f9\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4. , & \ub97c \uc0ac\uc6a9\ud55c \uace0\uae09 \uac80\uc0c9\uc5d0\uc11c\ub294 \uc791\ub3d9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
"},{"location":"include/quadProperty/","title":"quadProperty","text":"RoundSize:number?
ImageLabel, ImageButton \uc5d0\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc18d\uc131\uc785\ub2c8\ub2e4. \uc6d0\ud615 \uc774\ubbf8\uc9c0\uc5d0 Slice\ub97c \uc774\uc6a9\ud574 \ub465\uadfc \ud504\ub808\uc784\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c UICorner\ubcf4\ub2e4 \ubd80\ub4dc\ub7ec\uc6b4 \ucf54\ub108\ud6a8\uacfc\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.
Corner:number?
\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 UI\uc624\ube0c\uc81d\ud2b8\uc5d0 \uc801\uc6a9\ub429\ub2c8\ub2e4. UICorner\ub97c \uc774\uc6a9\ud574 \ubaa8\uc11c\ub9ac \ubd80\ubd84\uc744 \ub465\uae00\uac8c \ub9cc\ub4ed\ub2c8\ub2e4. \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
PaddingAll:UDim?
UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. \uc0c1\ud558\uc88c\uc6b0 \ubaa8\ub450 \uac19\uc740 \uac12\uc73c\ub85c \uc801\uc6a9\ub429\ub2c8\ub2e4. PaddingAllOffset \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
PaddingAllOffset:number?
UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. PaddingAll\uacfc \uac19\uc740 \ubc29\ubc95\uc73c\ub85c \uc791\ub3d9\ud558\ub098, Offset\uac12\ub9cc \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. PaddingAll \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
Scale:number?
UIScale\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. UIScale.Scale \uacfc \uac19\uc740 \ud6a8\uacfc\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4
"},{"location":"include/register/","title":"Register","text":"register \ud2b9\uc218 \uba54\uc18c\ub4dc\uac00 \uc801\uc6a9\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
:Add(value:any)->register
\uac12\uc5d0 \ub354\ud558\uae30\ub97c \ucde8\ud569\ub2c8\ub2e4. \uc74c\uc218\ud615\ud0dc\uac00 \uc81c\uacf5\ub418\ub294 \uacbd\uc6b0 \ube7c\uae30 \ucc98\ub7fc \uc791\ub3d9\ud569\ub2c8\ub2e4. number, Udim, UDim2, Color3, Vector2 \ub4f1 \ub354\ud560 \uc218 \uc788\ub294 \ubaa8\ub4e0\uac83\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 \uc8fc\uc758 : \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.pos = UDim2.fromOffset(100,0)\n\nFrame \"mainFrame\" {\n Position = myStore \"pos\":Add(UDim2.fromOffset(0,100));\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile true do\n myStore.pos = myStore.pos + UDim2.fromOffset(10,0)\n task.wait(2)\nend\n :With((store:valueStore, newValue:any, key:string)->())->register
\ud568\uc218 \ub610\ub294 \ud14c\uc774\ube14\uc5d0\uc11c \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4. Add \ubcf4\ub2e4 \ub098\uc911\uc5d0 \uc218\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4
\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \ud568\uc218\uc608\uc81c - \ud14c\uc774\ube14 myStore \"size\":With(function (_,value)\n return value * 2\nend)\n width \uac12\uc5d0 \ub9de\ucdb0 \uc790\ub3d9\uc73c\ub85c UI \uac00 \uc5c5\ub370\uc774\ud2b8\ub418\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.topbarSize = 60\nmyStore.width = 200\n\n-- \ub808\uc9c0\uc2a4\ud130\ub97c \ubcc0\uc218\ub85c \ub450\uace0 \uc0ac\uc6a9\ud569\ub2c8\ub2e4\nlocal listItemSize = myStore \"width\":With(function()\n return UDim2.fromOffset(myStore.width,60)\nend)\n\nFrame \"mainFrame\" {\n Class \"UIListLayout\" { SortOrder = Enum.SortOrder.LayoutOrder };\n\n -- \uc0ac\uc774\uc988\uac00 width \uc5d0 \ub9de\uac8c \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4\n Size = myStore \"width\":With(function ()\n return UDim.fromOffset(store.width,400)\n end);\n\n Frame \"Topbar\" {\n LayoutOrder = 1;\n BackgroundColor3 = Color3.fromRGB(255,0,0);\n -- \uc774\ub807\uac8c \uc5ec\ub7ec \uac12\uc744 \ubb36\uc5b4\uc11c \ub450 \uac12\uc774 \ubcc0\uacbd\ub428, \ud639\uc740 \uadf8\uc774\uc0c1\uc744\n -- \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n Size = myStore \"topbarSize,width\":With(function()\n return UDim2.fromOffset(myStore.width,myStore.topbarSize)\n end);\n }\n Frame \"ListItem\" {\n LayoutOrder = 2;\n BackgroundColor3 = Color3.fromRGB(0,255,0);\n Size = listItemSize;\n };\n Frame \"ListItem\" {\n LayoutOrder = 3;\n BackgroundColor3 = Color3.fromRGB(0,0,255);\n Size = listItemSize;\n };\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- width \uac12\uc744 \ubcc0\uacbd\ud574\ubcf4\uc138\uc694\nwhile true do\n myStore.width = myStore.width + 10\n task.wait(1)\nend\n colors \ud14c\uc774\ube14 \uc548\uc5d0 \uc788\ub294 \uc0c9\uae54\ub4e4\uc744 \ub3cc\uc544\uac00\uba70 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nlocal colors = {\n Color3.fromRGB(255,255,255);\n Color3.fromRGB(255,255,0);\n Color3.fromRGB(0,255,255);\n Color3.fromRGB(255,0,255);\n Color3.fromRGB(255,0,0);\n Color3.fromRGB(0,255,0);\n Color3.fromRGB(0,0,255);\n}\nmyStore.color = 1\n\nFrame \"mainFrame\" {\n Size = UDim2.fromOffset(200,200);\n -- colors \uc5d0\uc11c \uc778\ub371\uc2f1\ud574 \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4\n BackgroundColor3 = myStore \"color\":With(colors);\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- \uc778\ub371\uc2a4\ub97c \uc21c\ud68c\ud569\ub2c8\ub2e4\nwhile task.wait(1) do\n myStore.color = (i-1)%(#colors)+2\nend\n \uc8fc\uc758 \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
:Tween(options:TweenOptions)->register
\ud2b8\uc708\uc744 \uc774\uc6a9\ud574 \ubcc0\uacbd\uc0ac\ud56d\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4(\ucc98\uc74c \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc74c) \uc635\uc158\uc740 Tween \ubb38\uc11c\uc5d0 \ub098\uc640\uc788\ub294 \uc635\uc158\uacfc \uac19\uc2b5\ub2c8\ub2e4.
\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \ud55c\uaebc\ubc88\uc5d0 \uc774\ub3d9 -- Tween \uc635\uc158\uc744 \ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nmyStore \"size\":Tween{ Time = 2 }\n \ud504\ub808\uc784\uc744 \ud55c\uaebc\ubc88\uc5d0 \uc6c0\uc9c1\uc785\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\nmyStore.pos = UDim2.fromOffset(50,0)\nStyle \"TweenFrame\" {\n Size = UDim2.fromOffset(50,50);\n BackgroundColor3 = Color3.fromRGB(255,100,255);\n}\n\nFrame \"mainFrame\" {\n BackgroundColor3 = Color3.fromRGB(255,255,255);\n Size = UDim2.fromOffset(500,500);\n Frame \"TweenFrame\" {\n Position = myStore \"pos\":Tween{Time = 2};\n };\n Frame \"TweenFrame\" {\n Position = myStore \"pos\"\n :Add(UDim2.fromOffset(0,100))\n :Tween{Time = 2};\n };\n Frame \"TweenFrame\" {\n Position = myStore \"pos\"\n :Add(UDim2.fromOffset(0,200))\n :Tween{Time = 2};\n };\n Frame \"TweenFrame\" {\n Position = myStore \"pos\"\n :Add(UDim2.fromOffset(0,300))\n :Tween{Time = 2};\n }\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nlocal on = false\nwhile true do\n on = not on\n myStore.pos = on and UDim2.fromOffset(400,0) or UDim2.fromOffset(50,0)\n task.wait(1.5) -- \ud2b8\uc708\uc740 \ub36e\uc5b4 \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n -- \ub530\ub77c\uc11c 2 \ucd08\uc778 \uae38\uc774\ubcf4\ub2e4 \ub354 \ube68\ub9ac \ubc14\uafd4\ub3c4 \uc624\ub958\uac00 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\nend\n \uc8fc\uc758 \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
:Default(value:any)->register
\uae30\ubcf8\uac12\uc744 \uc815\ud569\ub2c8\ub2e4. \ub9cc\uc57d \uac12\uc774 nil \uc778 \uacbd\uc6b0 \uc774 \uac12\uc744 \uc0ac\uc6a9\ud558\uac8c \ub429\ub2c8\ub2e4. Add \ub098 With \ub4f1 \ub2e4\ub978\uac83\uc5d0 \uc601\ud5a5\ubc1b\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nFrame \"mainFrame\" {\n Size = UDim2.fromOffset(200,200);\n -- color \uac12\uc774 \uc5c6\uc73c\ubbc0\ub85c Default \uc548\uc758 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.\n BackgroundColor3 = myStore \"color\"\n :Default(Color3.fromRGB(255,0,0));\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\ntask.wait(5)\nmyStore.color = Color3.fromRGB(0,255,0)\n \uc8fc\uc758 \ucc98\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \ub54c\uc5d0\ub9cc \uc774 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4. :Register(<INPUT>(store:valueStore, newValue:any, key:string)->())->INPUT
\ub808\uc9c0\uc2a4\ud130\uc5d0 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4. \uac12\uc774 \ubcc0\uacbd\ub418\uba74 \ud568\uc218\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4
newValue \uc5d0\ub294 :Add, :With, :Tween, :Default \uac00 \ub530\ub85c \uacc4\uc0b0\ub418\uc9c0 \uc54a\uc73c\uba70, \uc124\uc815\ub41c \uac12\uc744 \uc544\ubb34 \uac00\uacf5 \uc5c6\uc774 \uc81c\uacf5\ud569\ub2c8\ub2e4
\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \uc5ec\ub7ec \ubcc0\uacbd\uc0ac\ud56d \ucd94\uc801 myStore.test = 1\n-- \ubc18\ud658 \uac12\uc740 \uc785\ub825\uc73c\ub85c \ub123\uc740 \ud568\uc218\uc785\ub2c8\ub2e4. !\uaf2d \uc800\uc7a5\ud574\uc57c\ud569\ub2c8\ub2e4\n-- :Register \ub294 \ud568\uc218\uac00 \uc0ac\ub77c\uc9c0\uc9c0 \uc54a\ub3c4\ub85d \uac12\uc744 \uc720\uc9c0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\n-- \ub9cc\uc57d \ubc84\ub9b4 \uacbd\uc6b0 \uc77c\uc815 \uc2dc\uac04 \ub4a4 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nlocal func = myStore \"test\":Register(function(_,newValue)\n -- \uac12 \ubcc0\uacbd\uc2dc \ucd9c\ub825\ub429\ub2c8\ub2e4\n print(newValue)\nend)\nmyStore.test = 2\n myStore.test1, myStore.test2 \uac00 \ubcc0\ud654\ud558\uba74 print \ud568\uc218\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.
local Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\n\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.test1 = 1\nmyStore.test2 = \"Hello\"\n\nlocal func = myStore \"test1,test2\":Register(function()\n print(myStore.test1,myStore.test2)\nend)\n\nmyStore.test1 = 2\n \uc8fc\uc758 Register \uc548\uc5d0 \ub4e4\uc5b4\uac04 \ud568\uc218\ub294 GC \uc548\uc815\uc131\uc744 \uc704\ud574\uc11c \uc57d\ud55c \ucc38\uc870\ub85c \uc800\uc7a5\ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c \ud568\uc218\ub97c \uc800\uc7a5\ud574\uc57c\ud569\ub2c8\ub2e4.
"},{"location":"include/tweenOptions/","title":"tweenOptions","text":"OPTION Time:number?
\ud2b8\uc708\uc758 \ucd1d \uae38\uc774\ub97c \uc815\ud569\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 1\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
OPTION Easing:string|(index:number)->number?
\ud2b8\uc708\uc758 \uac00\uac10\uc18d \uc815\ub3c4\ub97c \uacb0\uc815\ud569\ub2c8\ub2e4. \ubb38\uc790\uc5f4 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uac70\ub098, Tween.Easings.Linear\uc640 \uac19\uc774 \uc5f4\uac70\ud615 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud639\uc740 \ud544\uc694\uc5d0 \ub530\ub77c \ud568\uc218\ub97c \uc9c0\uc815\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ud568\uc218\ub97c Easing \uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c 1\ucc28 \uc9c4\ud589\ub3c4 (Linear, 0 \uc5d0\uc11c 1 \uc0ac\uc774\uc758 \uac12) \uac12\uc774 \uc8fc\uc5b4\uc9c0\uba70, \uacc4\uc0b0 \uacb0\uacfc\ub85c \uc2e4\uc81c \uc801\uc6a9\ub420 \uc704\uce58\ub97c \ubc18\ud658\ud574\uc57c\ud569\ub2c8\ub2e4. \ubc18\ud658\uac12\uc740 \uc74c\uc218\uc774\uac70\ub098 1 \ubcf4\ub2e4 \ud074 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 Exp2\uac00 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
type Easing =\n\"Linear\" // \uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615\n|\"Quint\" // 5 \uc81c\uacf1\n|\"Quart\" // \ub124\uc81c\uacf1\n|\"Cubic\" // \uc138\uc81c\uacf1\n|\"Quad\" // \uc81c\uacf1\n|\"Sin\" // \uc0ac\uc778 \ud30c\ud615\n|\"Circle\" // \uc0ac\ubd84\uc6d0\n|\"Expo\" // \uc9c0\uc218\ud615\n|\"Elastic\" // \ud0c4\uc131\n|\"Bounce\" // \ud280\uc5b4\uc624\ub984\n|\"Back\" // \ub4a4\ub85c \uac00\uac10\uc18d\n|\"Exp2\" // \ub35c \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 to 2\n|\"Exp4\" // \ub354 \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 ~ 4\n|EasingFunction?;\n \ud568\uc218\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \uc124\uba85\uacfc \ubbf8\ub9ac\ubcf4\uae30\ub294 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694 OPTION Direction:string?
\ud2b8\uc708\uc774 \uc9c4\ud589\ub418\ub294 \ubc29\ud5a5\uc785\ub2c8\ub2e4. \ubb38\uc790\uc5f4 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uac70\ub098, Tween.Directions.Out\uacfc \uac19\uc774 \uc5f4\uac70\ud615 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 Out\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
type Direction =\n// \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.\n\"Out\"\n// \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.\n|\"In\"\n//\uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.\n|\"InOut\"\n \ubc29\ud5a5\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \uc124\uba85\uacfc \ubbf8\ub9ac\ubcf4\uae30\ub294 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694 OPTION CallBack:{[number|\"*\"|string]:(Item:any, Alpha:number, AbsolutePercent:number)->()}?
\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uc2e4\ud589\uc911\uc778 \ub3c4\uc911\uc5d0 \ud568\uc218\ub97c \uc2e4\ud589\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud2b8\uc708\uc758 \uc9c4\ud589 \uc815\ub3c4\uc5d0 \ub530\ub77c\uc11c \ud55c\ubc88 \ud568\uc218\uac00 \uc2e4\ud589\ub418\uac70\ub098 \ud2b8\uc708 \uc9c4\ud589\uc911 \uacc4\uc18d\ud574\uc11c \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc778\ub371\uc2a4\uac00 \uc22b\uc790\uc778 \uacbd\uc6b0 \ud574\ub2f9 \uc9c0\uc810\uc744 \ub118\uc744 \ub54c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc73c\uba70, \"*\" \ub97c \uc778\ub371\uc2a4\ub85c \uc0ac\uc6a9\ud558\uba74 \ubaa8\ub4e0 \ubd80\ubd84\uc5d0\uc11c \ud568\uc218\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4. \ud568\uc218\uc5d0\ub294 \ud3b8\uc758\uc0c1 \ud2b8\uc708\uc744 \ud558\uace0\uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \uc704\uce58\uac12, \uc2dc\uac04\ub9cc\uc744 \uace0\ub824\ud55c 1\ucc28 \uc704\uce58\uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
OPTION OnStepped:(Item:any, Alpha:number, AbsolutePercent:number)->()?
CallBack \uc5d0 \"*\" \ub97c \ub123\uc740\uac83\uacfc \ub3d9\uc77c\ud55c \ud6a8\uacfc\ub97c \uac00\uc9c0\ub294 \ubcc4\uce6d\uc785\ub2c8\ub2e4
OPTION Ended:(Item:any, Alpha:number, AbsolutePercent:number)->()?
CallBack \uc5d0 1\uc744 \ub123\uc740\uac83\uacfc \ub3d9\uc77c\ud55c \ud6a8\uacfc\ub97c \uac00\uc9c0\ub294 \ubcc4\uce6d\uc785\ub2c8\ub2e4
OPTION Getter:(Item:any, Property:string)->any?
\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uac12\uc744 \uc5bb\uc73c\ub824 \ud560 \ub54c \uc0ac\uc6a9\ud560 \ud568\uc218\uc785\ub2c8\ub2e4. \ud568\uc218\uc5d0 \ud2b8\uc708\ud558\uace0 \uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \ud504\ub85c\ud37c\ud2f0 \uc774\ub984\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
Warning register:Tween() \uc640 \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
OPTION Getter:(Item:any, Property:string, Value:Lerpable)->any?
\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uac12\uc744 \uc124\uc815\ud558\ub824 \ud560 \ub54c \uc0ac\uc6a9\ud560 \ud568\uc218\uc785\ub2c8\ub2e4. \ud568\uc218\uc5d0 \ud2b8\uc708\ud558\uace0 \uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \ud504\ub85c\ud37c\ud2f0 \uc774\ub984, \uc124\uc815\ud560 \uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
Warning register:Tween() \uc640 \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
"},{"location":"include/typeDirection/","title":"typeDirection","text":"type Direction =\n// \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.\n\"Out\"\n// \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.\n|\"In\"\n//\uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.\n|\"InOut\"\n "},{"location":"include/typeEasings/","title":"typeEasings","text":"type Easing =\n\"Linear\" // \uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615\n|\"Quint\" // 5 \uc81c\uacf1\n|\"Quart\" // \ub124\uc81c\uacf1\n|\"Cubic\" // \uc138\uc81c\uacf1\n|\"Quad\" // \uc81c\uacf1\n|\"Sin\" // \uc0ac\uc778 \ud30c\ud615\n|\"Circle\" // \uc0ac\ubd84\uc6d0\n|\"Expo\" // \uc9c0\uc218\ud615\n|\"Elastic\" // \ud0c4\uc131\n|\"Bounce\" // \ud280\uc5b4\uc624\ub984\n|\"Back\" // \ub4a4\ub85c \uac00\uac10\uc18d\n|\"Exp2\" // \ub35c \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 to 2\n|\"Exp4\" // \ub354 \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 ~ 4\n|EasingFunction?;\n "},{"location":"tutorial/","title":"Getting Started","text":"\uc2e4\ud5d8\uc801\uc778 \ubaa8\ub4c8 \uc774 \ubaa8\ub4c8\uc740
"},{"location":"tutorial/#_1","title":"\uba38\ub9ac\ub9d0","text":"\uc774 \ud398\uc774\uc9c0\ub294 Quad \ubaa8\ub4c8\uc744 \uc27d\uac8c \uc2dc\uc791\ud560 \uc218 \uc788\ub3c4\ub85d \ud29c\ud1a0\ub9ac\uc5bc\uc744 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud398\uc774\uc9c0\ub97c \uc815\ub3c5\ud574 Quad \ubaa8\ub4c8\uc758 \uc804\ubc18\uc801\uc778 \uc0ac\uc6a9\ubc95\uc744 \ud30c\uc545\ud574\ubcf4\uc138\uc694!
\uc8fc\uc758: \uc774 \ubaa8\ub4c8\uc740 \uac1c\ubc1c \uc9c4\ud589\uc774 \ub9e4\uc6b0 \ube60\ub985\ub2c8\ub2e4. \ub9ce\uc740\uc591\uc758 \ubcc0\uacbd \uc0ac\ud56d\uc774 \uc788\uc744 \uc218 \uc788\uc73c\ubbc0\ub85c github \uc5d0\uc11c \ubcc0\uacbd\uc0ac\ud56d\uc744 \uacc4\uc18d\ud574\uc11c \ucd94\uc801\ud558\uc138\uc694
\ubcc0\uacbd \uc0ac\ud56d\uc740 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/#_2","title":"\uc124\uce58","text":""},{"location":"tutorial/#_3","title":"\ubaa8\ub4c8 \ubd88\ub7ec\uc624\uae30/\ucd08\uae30\ud654","text":"local Quad = require(path.to.module).Init()\n \ubaa8\ub4c8\uc744 \uc14b\uc5c5\ud558\uae30 \uc704\ud574\uc11c\ub294 .Init(QuadId:string?) \uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c QuadId \uac12\uc740 \ud544\uc694\ud558\uc9c0 \uc54a\uc9c0\ub9cc, \ub098\uc911\uc5d0 \uc18c\uac1c\ud560 Store \uc640 \uac19\uc740 \uc77c\ubd80 \uae30\ub2a5\ub4e4\uc774 QuadId:string \uc5d0 \uc601\ud5a5\ubc1b\uae30\ub3c4 \ud569\ub2c8\ub2e4.
.Init(QuadId:string) \ud568\uc218\ub294 QuadId \uac00 \uac19\uc740 \ubd88\ub7ec\uc624\uae30\uac00 \uc774\ubbf8 \uc788\uc5c8\ub358 \uacbd\uc6b0, \ucd08\uae30\ud654 \ud558\uc9c0 \uc54a\uace0 \ubd88\ub7ec\uc654\ub358\uac83\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \ubaa8\ub4c8\ub4e4 \ub07c\ub9ac QuadId \uac00 \uac19\uc740 \uacbd\uc6b0 Store \uc640 \uac19\uc740\uac83\uc774 \uacf5\uc720\ub429\ub2c8\ub2e4.
QuadId \uac00 \ube44\uc6cc\uc9c4 \uacbd\uc6b0 \ud55c\ubc88\ub3c4 \uc0dd\uc131\ub41c \uc801 \uc5c6\ub294 \uc0c8\ub85c\uc6b4 Quad \uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4
local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n \ubd88\ub7ec\uc624\uae30\uac00 \ub05d\ub0ac\ub2e4\uba74 \uc774\uc81c Quad \uc758 \uc790\uc6d0\ub4e4\uc744 \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4! \ub2e4\uc74c \ud398\uc774\uc9c0\ub85c \ub118\uc5b4\uac00 \uc5b4\uc11c \ud65c\uc6a9\ud574 \ubd05\uc2dc\ub2e4
"},{"location":"tutorial/#_4","title":"\ud0c0\uc785 \ubd88\ub7ec\uc624\uae30","text":"\uae30\ubcf8\uc801\uc73c\ub85c \uc774 \ubaa8\ub4c8\uc740 \ub85c\ub4dc\uc2dc \ud0c0\uc785\uc744 \ubc18\ud658\ud558\uc9c0\ub9cc. \uc9c1\uc811\uc801\uc73c\ub85c \ud0c0\uc785\uc744 \uc9c0\uc815\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 types.lua \ub97c \ubd88\ub7ec\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4
local types\n "},{"location":"tutorial/#_5","title":"\ud14c\uc2a4\ud2b8 \ud658\uacbd \uc900\ube44","text":"\ud14c\uc2a4\ud2b8 \ud658\uacbd\uc740 rojo \uc640\uc758 \uac1c\ubc1c\ud1b5\ud569\uc744 \uc704\ud574 Play \ubc84\ud2bc\uc744 \ub204\ub974\uc9c0 \uc54a\uace0 \ubbf8\ub9ac\ubcf4\uae30\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4e4\uc5b4\uc90d\ub2c8\ub2e4 \uc774\ub97c \ud1b5\ud574 \ub2e4\ub978 \ucf54\ub4dc \ubc29\uc2dd\uc758 UI \ud504\ub808\uc784 \uc6cc\ud06c\ubcf4\ub2e4 \ube60\ub978 \uac1c\ubc1c\uc18d\ub3c4\ub97c \ub2ec\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/#_6","title":"\uc790\ub3d9 \ub9ac\ub85c\ub4dc","text":"\uc8fc\uc758: rojo \ud658\uacbd\uc774 \uc544\ub2c8\ub77c\uba74 \uc790\ub3d9 \ub9ac\ub85c\ub4dc\ub294 \ub799\uc744 \ub3d9\ubc18\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
\uc77c\ubc18\uc801\uc73c\ub85c, \ub85c\uceec \ud3b8\uc9d1 \ud658\uacbd\uc5d0\uc11c \ub85c\ube14\ub85d\uc2a4\uc758 script editor \ub294 \ud55c\uae00\uc790 \ud55c\uae00\uc790 \ubcc0\uacbd\uc2dc \ub9c8\ub2e4 .Source \ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4. \uc774\ub294 \uacf3 \ud55c\uae00\uc790 \ud55c\uae00\uc790 \ud0c0\uc774\ud551 \uc2dc \ub9c8\ub2e4 UI \uac00 \uc5c5\ub370\uc774\ud2b8 \ub420 \uc218 \uc788\uc74c\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. Quad \uc758 tracker \ubaa8\ub4c8\uc740 \uc21c\uac04\uc801\uc73c\ub85c \ub9ce\uc740\uc591\uc758 \ub9ac\ub85c\ub4dc\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\ub3c4\ub85d \uc801\uc808\ud55c \ucfe8\ud0c0\uc784\uacfc \uc2dc\uac04\ubd84\ubc30\ub97c \uac00\uc9c0\uace0 \uc788\uc9c0\ub9cc, \uc774 \uacbd\uc6b0\uc5d0\ub3c4 Ctrl+S \ub97c \ub20c\ub7ec \uc800\uc7a5\ud574\uc57c \uc801\uc6a9\ub418\ub294 vscode \uc640 \uac19\uc740 \ud0c0 \ud3b8\uc9d1\uae30\uc640\ub294 \ucc28\uc774\uac00 \ub0a0 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc\uac00 \ucee4\uc9d0\uc73c\ub85c \uc778\ud574 \uc790\ub3d9 \ub9ac\ub85c\ub4dc\uc5d0\uc11c \ud37c\ud3ec\uba3c\uc2a4\uc801 \uc774\uc288\ub97c \uacaa\ub294\ub2e4\uba74, rojo \ub97c \ud65c\uc6a9\ud574 \ucf54\ub4dc\ub97c \uc678\ubd80\ub85c \uc62e\uae34 \ud6c4, vscode \ub97c \uc2a4\ud29c\ub514\uc624 \uc704\uc5d0 \ub193\uace0 \ubbf8\ub9ac\ubcf4\uae30\uc640 \ucf54\ub4dc\ub97c \ub3d9\uc2dc\uc5d0 \ubcf4\uba74\uc11c \ud3b8\uc9d1\ud558\uc138\uc694.
"},{"location":"tutorial/#_7","title":"\uc218\ub3d9 \ub9ac\ub85c\ub4dc","text":""},{"location":"tutorial/10_signal/","title":"Signal","text":"Quad \uc5d0\ub294 \ud3b8\uc758\uc0c1\uc758 \uc774\uc720\ub85c
"},{"location":"tutorial/1_import/","title":"Import - \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131","text":""},{"location":"tutorial/1_import/#_1","title":"\ub85c\ube14\ub85d\uc2a4 \uc624\ube0c\uc81d\ud2b8 \ubd88\ub7ec\uc624\uae30","text":"Frame \uacfc \uac19\uc740 UI \uc624\ube0c\uc81d\ud2b8\ub97c \ub9cc\ub4e4\uace0 \uc2f6\uc740 \uacbd\uc6b0 \uba3c\uc800 import \ub97c \uc774\uc6a9\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc774 \uc785\ub825\ud574\ubcf4\uc138\uc694!
local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal Frame = Class \"Frame\"\n\nprint(\n Frame {\n Name = \"Wow!\";\n -- \ub2e4\uc74c\uacfc \uac19\uc774 \uc790\uc2dd\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n Frame {\n Name = \"Child\";\n };\n }\n)\n \ub098\uc911\uc5d0 \uc790\uc2e0\ub9cc\uc758 UI \uc624\ube0c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc9c0\ub9cc, \uc77c\ubc18\uc801\uc778 \ub85c\ube14\ub85d\uc2a4\uac00 \uc9c0\uc6d0\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\uc758 \uacbd\uc6b0 Class(ClassName:string) \uc73c\ub85c \ubd88\ub7ec\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/1_import/#class","title":"\ubd88\ub7ec\uc628 Class \uc5d0 \uae30\ubcf8\uac12 \uc124\uc815","text":"\ubd88\ub7ec\uc628 Class \uc5d0 \uae30\ubcf8\uac12\uc744 \uc124\uc815\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 BorderSizePixel \uc640 \uac19\uc774 \uc790\uc8fc \uc0ac\uc6a9\ub420 \uc218 \uc788\ub294 \ud504\ub85c\ud37c\ud2f0\ub97c \ubbf8\ub9ac \uc9c0\uc815\ud574 \ub458 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal FrameWithoutBorder = Class \"Frame\"\nFrameWithoutBorder.BorderSizePixel = 0\n\nlocal FrameWithBorder = Class \"Frame\"\nFrameWithBorder.BorderSizePixel = 1\n\nlocal frame1 = FrameWithoutBorder {}\nlocal frame2 = FrameWithBorder {}\nlocal frame3 = FrameWithBorder {\n -- \uac12\uc744 \ub36e\uc5b4 \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n -- \uc774\ub807\uac8c \ud558\uba74 \uae30\ubcf8\uac12\uc774 \ubb34\uc2dc\ub429\ub2c8\ub2e4.\n BorderSizePixel = 0;\n}\n\nprint(frame1.FrameWithBorder.BorderSizePixel)\nprint(frame2.FrameWithBorder.BorderSizePixel)\nprint(frame3.FrameWithBorder.BorderSizePixel)\n \uc774\uc81c \uadf8\ub824\ub0b8 \ud504\ub808\uc784\uc744 \ud654\uba74\uc5d0 \uadf8\ub824\ubcf4\uace0 \uc2f6\ub098\uc694? \ub2e4\uc74c \ud29c\ud1a0\ub9ac\uc5bc Mount \ub97c \ud655\uc778\ud574\ubcf4\uc138\uc694!
"},{"location":"tutorial/2_mount/","title":"Mount - \ud654\uba74\uc5d0 UI \ud45c\ud604","text":""},{"location":"tutorial/2_mount/#ui","title":"\ud654\uba74\uc5d0 UI \ub97c \ud45c\uc2dc\ud558\uae30","text":"\uc77c\ubc18\uc801\uc73c\ub85c Quad \ubaa8\ub4c8\uc5d0\uc11c \ubaa8\ub4e0 Parent \ucc98\ub9ac\ub294 Mount \ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4. Mount(to:any,...item:any?)->mounts \ud568\uc218\ub97c \uc774\uc6a9\ud558\uba74 \ub2e4\ub8e8\ub294 \uc624\ube0c\uc81d\ud2b8\uac00 \ub85c\ube14\ub85d\uc2a4 Instance \uc778\uc9c0, \ud5a5\ud6c4 \uc18c\uac1c\ub420 Quad \ud655\uc7a5 \ud074\ub798\uc2a4\uc778\uc9c0 \uc0c1\uad00\uc5c6\uc774 \uc54c\uc544\uc11c Parent \uac00 \ucc98\ub9ac\ub429\ub2c8\ub2e4.
--- StarterGui \uc548\uc5d0 ScreenGui \ub97c \ub123\uace0 \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\ub85c \uc785\ub825\ud574\ubcf4\uc138\uc694\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nMount(ScreenGui,\n Frame {\n Name = \"Wow!\";\n }\n --[[\n , Frame {} , Frame {}\n \ub354\ub9ce\uc740 \uc624\ube0c\uc81d\ud2b8\ub97c \ub2e4\uac19\uc774 Mount \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n ]]\n)\n "},{"location":"tutorial/2_mount/#_1","title":"\ub9c8\uc6b4\ud2b8 \uac1d\uccb4","text":"\ud3b8\uc758\ub97c \uc704\ud574\uc11c Mount \ud568\uc218\ub294 mounts \ub77c\ub294 \uac1d\uccb4\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. \uc774\uac83\uc744 \uc774\uc6a9\ud558\uba74 \ud544\uc694\uc5d0 \ub530\ub77c\uc11c Mount \uc0c1\ud0dc\ub97c \ud574\uc81c\ud558\uac70\ub098 \ucd94\uac00 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. mounts \uac1d\uccb4\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc18c\ub4dc\ub97c \uac00\uc9d1\ub2c8\ub2e4.
:Unmount()
\uc774\ub807\uac8c \ud558\uba74 \ub9c8\uc6b4\ud2b8\ub41c Instance \ub97c \uc9c0\uc6cc\ubc84\ub9bd\ub2c8\ub2e4. Quad \ub294 \uc548\uc804\ud55c \uba54\ubaa8\ub9ac \uad00\ub9ac\ub97c \uc704\ud574 gc \uc758 \uae30\ub2a5\uc5d0 \uc758\uc874\ud558\ubbc0\ub85c, gc \uc2dc\uac04\ucc28\ub85c \uc778\ud574 Store.GetObject \uc5d0\uc11c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0ac\ub77c\uc9c0\ub294\ub370 \uc2dc\uac04\uc774 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui,mainFrame)\n\nlocal childFrame = Frame {}\nlocal childFrameMount = Mount(mainFrame,childFrame)\nchildFrameMount:Unmount()\n-- childFrame \uc740 \ub2e8\uc21c\ud788 .Parent = nil \ub418\ub294 \uac83\uc744 \ub118\uc5b4 \uba54\ubaa8\ub9ac\uc5d0\uc11c \uc0ac\ub77c\uc9d1\ub2c8\ub2e4\n-- \uc989, Destroy() \uac00 \ud638\ucd9c\ub429\ub2c8\ub2e4\n :Add(item:any)
Mount \uc5d0 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ucc98\uc74c \uc124\uc815\ud55c to \uac12\uc744 \ub530\ub77c \ubd80\ubaa8\uac00 \uacb0\uc815\ub429\ub2c8\ub2e4.
\uc774 \ub3d9\uc791\uc740 \ub9ac\uc2a4\ud2b8\ub97c \ub9cc\ub4e4 \ub54c \uc720\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc\ub85c\ub4dc \ub3d9\uc791\uc2dc \uc9c1\uc811 \uc81c\uac70\uac00 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui, mainFrame)\n\nlocal lastListMount = Mount(mainFrame)\nlocal function refreshList()\n lastListMount:Unmount() -- \uc774\uc804 children \uc744 \uc54c\uc544\uc11c \uc81c\uac70\ud569\ub2c8\ub2e4\n for i = 1,10 do\n lastListMount:Add(Frame { Name = tostring(i) })\n end\nend\n\ntask.spawn(function()\n while true do\n refreshList()\n task.wait(2)\n end\nend)\n \ub2e4\uc74c\uacfc \uac19\uc774 \uc774\uc804 children \uc744 \uac04\uc811\uc801\uc73c\ub85c \uc81c\uac70\ud558\uace0 \uc0c8\ub85c\uc6b4 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e8 ScrollFrame \uc758 \uacbd\uc6b0 CanvasPosition\uc774 \ucd08\uae30\ud654 \ub418\uc5b4\ubc84\ub9ac\ubbc0\ub85c \uc790\uc2dd\ub4e4\uc744 :Unmount() \ud558\uae30 \uc804\uc5d0 \uc704\uce58\ub97c \uc800\uc7a5\ud558\uace0 \ub2e4\uc2dc \ubd88\ub7ec\uc640\uc57c \ud569\ub2c8\ub2e4
"},{"location":"tutorial/3_getObject/","title":"GetObject - \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc544\uc774\ub514 \ubd80\uc5ec","text":"\uc77d\uae30 \uc804... \ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Store.GetObject \uac00 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Store.GetObject \ub294 \uacf5\uc720\ub429\ub2c8\ub2e4
"},{"location":"tutorial/3_getObject/#_1","title":"\uc624\ube0c\uc81d\ud2b8\uc5d0 \uc544\uc774\ub514 \ubd80\uc5ec\ud558\uae30, \uc0ac\uc6a9\ud558\uae30","text":"\ubcc0\uc218\uc5d0 \ub9cc\ub4e4\uc5b4\uc9c4 \uc624\ube0c\uc81d\ud2b8\ub97c \ud558\ub098\ud558\ub098 \uc800\uc7a5\ud574\uc57c\ud558\ub098\uc694? \uc544\ub2c8\uc694, Quad \uc5d0\ub294 \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount,Store = Quad.Class,Quad.Mount,Quad.Store\n\nlocal Frame = Class \"Frame\"\n\nFrame \"mainFrame\" {\n Size = UDim2.fromScale(1,1);\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n \uc544\uc774\ub514\uc5d0 \ud5c8\uc6a9\ub418\ub294 \uae00\uc790\ub294 \ubcc0\uc218\uba85\uacfc \uac19\uc2b5\ub2c8\ub2e4. \ub300\uc18c\ubb38\uc790, \uc22b\uc790, \uc5b8\ub354\ubc14(_) \ub97c \ud5c8\uc6a9\ud569\ub2c8\ub2e4. \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc Frame \"mainFrame\" {} \uc640 \uac19\uc774 id \uac12\uc744 \uc9c0\uc815\ud574 \uc900\ub2e4\uba74 \uc0dd\uc131\ub41c \uc624\ube0c\uc81d\ud2b8\ub294 \uadf8 \uc544\uc774\ub514\ub97c \uac00\uc9c0\uac8c \ub429\ub2c8\ub2e4. Store.GetObject(id:string)->Object \ub294 \uc0dd\uc131\ub41c \uac1d\uccb4\uc911 \uac00\uc7a5 \uccab\ubc88\uc9f8\uc758 id \uac00 \uc77c\uce58\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \ubc18\ud658\ud574 \uc90d\ub2c8\ub2e4.
local index = 1\nFrame (\"mainFrame\" .. index) {}\nprint(Store.GetObject(\"mainFrame\" .. index))\n \uc704\ucc98\ub7fc \uc0dd\uc131\uc774\ub098 \uac00\uc838\uc624\uae30\uc5d0\uc11c \uc2dd\uc744 \ub9cc\ub4e4\uc5b4 \ub123\uc744 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.
"},{"location":"tutorial/3_getObject/#_2","title":"\ub2e4\ub7c9\uc758 \uc624\ube0c\uc81d\ud2b8\ub97c \ub2e4\ub8e8\uae30","text":"\uc8fc\uc758 Store.GetObjects\uc758 \ubc18\ud658\uac12\uc778 objectList\ub294 \uce90\uc2dc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4. objectList\ub97c local \uc5d0 \ub123\uace0 \uacc4\uc18d\ud574\uc11c \uc720\uc9c0\uc2dc\ud0a4\uc9c0 \ub9c8\uc2ed\uc2dc\uc624, \ubc18\ud658\uac12\uc740 \uc790\ub3d9\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8 \ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
Quad \ub294 \ub2e4\ub7c9\uc758 \uc624\ube0c\uc81d\ud2b8\ub97c \ub2e4\ub8e8\uae30 \ud3b8\ud558\ub3c4\ub85d Store.GetObjects(id:string)->objectList \ub77c\ub294 \ud568\uc218\ub97c \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4.
\uc2e4\ud5d8\uc73c\ub85c, \uc0c9\uae54\uc774 \ub79c\ub364\ud558\uac8c \ubc14\ub00c\ub294 \ud504\ub808\uc784\ub4e4\uc744 \ub9cc\ub4e4\uc5b4 \ubd05\uc2dc\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount,Store = Quad.Class,Quad.Mount,Quad.Store\n\nlocal Frame = Class \"Frame\"\n\nFrame \"mainFrame\" {\n Size = UDim2.fromScale(1,1);\n Frame \"Child\" {\n Size = UDim2.fromOffset(20,20);\n };\n Frame \"Child\" {\n Size = UDim2.fromOffset(20,20);\n Position = UDim2.fromOffset(30,0);\n };\n Frame \"Child\" {\n Size = UDim2.fromOffset(20,20);\n Position = UDim2.fromOffset(60,0);\n };\n Frame \"Child\" {\n Size = UDim2.fromOffset(20,20);\n Position = UDim2.fromOffset(90,0);\n };\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- \uac12\uc744 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uac12\uc744 \uc77d\uac70\ub098 :Connect \ud560 \uc218\ub294 \uc5c6\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"Child\").Size = UDim2.fromOffset(30,30)\n\n-- \ud544\uc694\uc5d0 \ub530\ub77c Store.GetObjects(\"Child\") \ub97c pairs \uc5d0 \ub123\uc5b4 for \ubb38\uc744 \uc0ac\uc6a9\ud558\uac70\ub098\n-- :Each , :EachAsync , :IsEmpty \ud568\uc218\ub97c \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\ntask.spawn(function()\n while true do\n Store.GetObjects(\"Child\"):Each(function (item, index)\n item.BackgroundColor3 = Color3.fromRGB(\n math.random(0,255),\n math.random(0,255),\n math.random(0,255)\n )\n end)\n task.wait(1)\n end)\nend\n\n-- for \ubb38\uc744 \uc774\uc6a9\ud574\uc11c \ucd9c\ub825\ud569\ub2c8\ub2e4\nfor _,child in ipairs(Store.GetObjects(\"Child\")) do\n print(child)\nend\n "},{"location":"tutorial/3_getObject/#objectlist","title":"objectList","text":"Store.GetObjects() \uc758 \ubc18\ud658 objectList \uc758 \uba54\uc18c\ub4dc\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
:Each((item:any, index:number)->())
\uc77c\ubc18\uc801\uc778 \ubc18\ubcf5\uc785\ub2c8\ub2e4. for \ub97c \uc0ac\uc6a9\ud558\ub294\uac83\uacfc \ud6a8\uacfc\uac00 \uac19\uc73c\ub098 \ud568\uc218\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4
:EachAsync((item:any, index:number)->())
\ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uace0 \ubc14\ub85c\ubc14\ub85c \ub2e4\uc74c \uc544\uc774\ud15c\uc73c\ub85c \ub118\uc5b4\uac11\ub2c8\ub2e4. \ucf54\ub8e8\ud2f4\uc774 \uc774\uc6a9\ub429\ub2c8\ub2e4. wrap() \ucf54\ub8e8\ud2f4\uc744 \ubaa8\ub974\uac70\ub098, \ud544\uc694\uc131\uc774 \uc5c6\ub294\uacbd\uc6b0 \uc77c\ubc18\uc801\uc73c\ub85c :Each \ub97c \uc0ac\uc6a9\ud574\ub3c4 \ub429\ub2c8\ub2e4
:IsEmpty()
\uc774 ObjectList \uac00 \ube44\uc5b4\uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.
:Remove(indexOrItem:number|any)
objectList \uc5d0\uc11c \ud574\ub2f9\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4. , & \ub97c \uc0ac\uc6a9\ud55c \uace0\uae09 \uac80\uc0c9\uc5d0\uc11c\ub294 \uc791\ub3d9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/3_getObject/#id","title":"\uace0\uae09 ID \uc0ac\uc6a9\ud558\uae30","text":"id \uae30\ub2a5\uc744 \uc870\uae08\ub354 \uace0\uae09\uc801\uc778 \ubc29\ubc95\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.
=== \uc6a9\ubc95
```lua\nFrame \"a,b\" {\n\n}\n```\n === \uc608\uc81c
\uc880\ub354 \uc9c1\uad00\uc801\uc778 \ud655\uc778\uc744 \uc704\ud574\uc11c \uc791\ub3d9\uc2dc\ucf1c\ubcf4\uc138\uc694.\n\n```lua\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Mount\nlocal Mount = Quad.Store\nlocal Store = Quad.Class\n\nlocal Frame = Class \"Frame\"\n\n--\ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ubaa8\ub450 \uac00\uc9c4 \ud504\ub808\uc784\uc744 \uc0dd\uc131\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\nFrame \"a,b\" {\n Name = \"main\";\n Frame \"a\" {\n Name = \"Child1\";\n };\n Frame \"b\" {\n Name = \"Child2\";\n };\n}\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ub458\ub2e4 \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a,b\"):Each(function(item, index)\n print(item.Name)\nend)\nprint(\"----\")\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ub97c \ub3d9\uc2dc\uc5d0 \uac00\uc9c4 \uac83\uc744 \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a&b\"):Each(function(item, index)\n print(item.Name)\nend)\nprint(\"----\")\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a\uc640b \ub97c \ub3d9\uc2dc\uc5d0 \uac00\uc9c4\uac83\uacfc, b \ub97c \uac00\uc9c4\uac83\uc744 \uc120\ud0dd\n-- \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a&b,b\"):Each(function(item, index)\n print(item.Name)\nend)\n```\n \ub610\ub294(or) \uc5f0\uc0b0 , \uadf8\ub9ac\uace0(and) \uc5f0\uc0b0 & GetObjects \uc5d0\ub294 \uc774 \ub450 \uc5f0\uc0b0\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uace0, \uc0dd\uc131\uc2dc\uc5d0\ub294 , \uc73c\ub85c \uc5ec\ub7ec \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub744\uc5b4\uc4f0\uae30\ub294 \ubb34\uc2dc\ub429\ub2c8\ub2e4
\uc8fc\uc758 \uace0\uae09 ID \uc0ac\uc6a9\uc2dc objectList:Remove \uba54\uc18c\ub4dc\ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/3_getObject/#id_1","title":"id \ucd94\uac00\uc640 \uc81c\uac70","text":"\uacbd\uc6b0\uc5d0 \ub530\ub77c \uc774\ubbf8 \uc0dd\uc131\ud55c \uc624\ube0c\uc81d\ud2b8\uc5d0 id \ub97c \ucd94\uac00 \ud639\uc740 \uc81c\uac70\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Store = Quad.Store\n\nlocal Frame = Class \"Frame\"\n\nFrame \"testing\" {}\n\n-- \uc544\uc774\ub514\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4\nStore.AddObject(\n \"a,b\", Store.GetObject(\"testing\")\n)\n\n-- \uc544\uc774\ub514\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4\nStore.GetObjects(\"a\"):Remove(Store.GetObject(\"testing\"))\n Store.AddObject(ids:string, item:any) \ub97c \uc774\uc6a9\ud574 item \uc5d0 \uc544\uc774\ub514\ub97c \ucd94\uac00\ud558\uace0 :Remove(item:any) \ub97c \uc774\uc6a9\ud574 item \uc5d0 \uc544\uc774\ub514\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4
"},{"location":"tutorial/4_style/","title":"\ubc18\ubcf5\ub418\ub294 \uc18d\uc131\uac12\uc744 \uc904\uc774\uae30","text":"\uc77d\uae30 \uc804... \ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Style \uae30\ub2a5\uc774 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Style \ub294 \uacf5\uc720\ub429\ub2c8\ub2e4
Quad \uc5d0\uc11c\ub294 \ubc18\ubcf5\uc801\uc778 \uc18d\uc131\ub4e4\uc744 \uc904\uc5ec \uc4f8 \uc218 \uc788\ub3c4\ub85d Style \uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\n\n-- \uc0c8\ub85c\uc6b4 \uc2a4\ud0c0\uc77c\uc744 \ud558\ub098 \ub9cc\ub4ed\ub2c8\ub2e4\nlocal myStyle = Style {\n Size = UDim2.fromOffset(20,20);\n BackgroundColor3 = Color3.fromRGB(255,255,0);\n BackgroundTransparency = 0.5;\n}\n\nFrame \"mainFrame\" {\n Size = UDim2.fromScale(1,1);\n Frame \"Child\" {\n myStyle; -- \uc2a4\ud0c0\uc77c\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4!\n };\n Frame \"Child\" {\n Position = UDim2.fromOffset(30,0);\n myStyle;\n };\n Frame \"Child\" {\n Position = UDim2.fromOffset(60,0);\n myStyle;\n };\n Frame \"Child\" {\n Position = UDim2.fromOffset(90,0);\n -- \uc2a4\ud0c0\uc77c\uc740 \ub36e\uc5b4\uc368 \uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n BackgroundColor3 = Color3.fromRGB(255,0,0);\n myStyle;\n };\n}\n\nMount(ScreenGUI,Store.GetObject(\"mainFrame\"))\n Style\uc744 \uc0ac\uc6a9\ud558\uba74 \ub9ce\uc740 \uc591\uc758 \uc18d\uc131\uc744 \ud558\ub098\uc5d0 \ubcc0\uc218\ub85c \uc9d1\uc5b4\ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Style\uc744 \uc0ac\uc6a9\ud574\uc11c \ub9ce\uc740 \uc591\uc758 \ucf54\ub4dc\ub97c \uc904\uc5ec\ubcf4\uc138\uc694
\ub610, Style\uc5d0\ub294 \ud0c0\uac9f id\ub97c \uc9c0\uc815\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\n\n-- \uc5ec\uae30\uc5d0\ub294 & \ub098 , \uac00 \uc801\uc6a9\ub418\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4!\nStyle \"Child\" {\n Size = UDim2.fromOffset(20,20);\n BackgroundColor3 = Color3.fromRGB(255,255,0);\n BackgroundTransparency = 0.5;\n}\n\n-- \ub2e8, Style\uc740 \uba3c\uc800 \uc120\uc5b8\ud574\uc57c\ud569\ub2c8\ub2e4, Frame\uc744 \uba3c\uc800 \ub9cc\ub4e4\uace0\n-- Style\uc744 \uc120\uc5b8\ud558\uba74 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\nFrame \"mainFrame\" {\n Size = UDim2.fromScale(1,1);\n Frame \"Child\" {};\n Frame \"Child\" { Position = UDim2.fromOffset(30,0) };\n}\n\nMount(ScreenGUI,Store.GetObject(\"mainFrame\"))\n Style(id:string){ any }\ub97c \uc774\uc6a9\ud574 \uc2a4\ud0c0\uc77c\uc744 \uc120\uc5b8\ud574\uc8fc\uba74 \ub098\uc911\uc5d0 \ud574\ub2f9 id\ub97c \uac00\uc9c4 \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc \ud574\ub2f9 \uc2a4\ud0c0\uc77c\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4.
"},{"location":"tutorial/5_event/","title":"Event - \uc774\ubca4\ud2b8 \ud578\ub4e4\ub9c1","text":""},{"location":"tutorial/5_event/#_1","title":"\uc774\ubca4\ud2b8 \ub4f1\ub85d\ud558\uae30","text":"MouseButton1Click \ud639\uc740 GetPropertyChangedSignal \uac19\uc740 \ub85c\ube14 \uae30\ubcf8 \uc774\ubca4\ud2b8\ub97c \uac04\ub2e8\ud558\uac8c \ub4f1\ub85d\ud558\uace0 \uc2f6\uc73c\uc2e0\uac00\uc694? Event \ub97c \uc774\uc6a9\ud574\ubcf4\uc138\uc694.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Event = Quad.Event\nlocal Store = Quad.Store\n\nlocal TextButton = Class \"TextButton\"\nlocal Count = 0\n\nTextButton \"mainButton\" {\n Size = UDim2.fromOffset(200,200);\n Text = \"0 \ubc88 \ud074\ub9ad\ud588\uc2b5\ub2c8\ub2e4\";\n [Event \"MouseButton1Click\"] = function(self,x,y)\n Count = Count + 1\n self.Text = Count .. \" \ubc88 \ud074\ub9ad\ud588\uc2b5\ub2c8\ub2e4\"\n end;\n}\nMount(ScreenGUI, Store.GetObject(\"mainButton\"))\n "},{"location":"tutorial/5_event/#_2","title":"\uc774\ubc34\ud2b8 \ub9ac\uc2a4\ud2b8","text":"\uc801\uc6a9\uac00\ub2a5\ud55c Event \ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4
Event(name:string)
\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 \uc774\ubca4\ud2b8\ub4e4\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4, MouseEnter, MouseLeave, MouseButton1Down, MouseButton1Up \ub4f1\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4 \uae30\ubcf8\uc801\uc73c\ub85c \ub85c\ube14\ub85d\uc2a4\uc758 \uae30\ubcf8 \uc774\ubca4\ud2b8\ub4e4\uacfc \ub2e4\ub974\uac8c, \uccab\ubc88\uc9f8 \uc778\uc790\ub85c self \ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
\uc6a9\ubc95\uc608\uc81c - \ubc84\ud2bc\ud074\ub9ad Frame {\n [Event \"MouseEnter\"] = function (self)\n print(self.Name .. \"\uc5d0 \ub9c8\uc6b0\uc2a4\uac00 \uc62c\ub77c\uc654\uc2b5\ub2c8\ub2e4\")\n end;\n}\n local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal TextButton = Class \"TextButton\"\n\nTextButton \"mainButton\" {\n Size = UDim2.fromOffset(200,200);\n [Event \"MouseEnter\"] = function (self)\n print(\"\ubc84\ud2bc\uc774 \ud074\ub9ad\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n end;\n}\nMount(ScreenGUI, Store.GetObject(\"mainButton\"))\n Event.Created
\uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub418\uc5c8\uc744 \ub54c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uc778\uc790\ub85c self \ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nFrame {\n [Event.Created] = function (self)\n print(self.Name .. \"\uc774 \uc0dd\uc131\ub418\uc5c8\uc5b4\uc694\")\n end;\n}\n \uc8fc\uc758 Event.Created \uac00 \uc2e4\ud589\ub420 \ub54c\ub294 Parent \uac12\uc774 \uc815\ud574\uc9c0\uc9c0 \uc54a\uc558\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. self.Parent \ub294 \uc811\uadfc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4. Class.Extend \uc5d0\uc11c\ub294 AfterRender \ub97c \uc774\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.
Event.CreatedAsync
Event.Created \uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc, \ucf54\ub8e8\ud2f4 \uc548\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4. objectList:EachAsync() \ucc98\ub7fc \ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nFrame {\n Frame {\n Name = \"A\";\n [Event.CreatedAsync] = function (self)\n -- \uc774 \ud568\uc218\uac00 \ub05d\ub098\uc9c0 \uc54a\ub354\ub77c\ub3c4 \ub2e4\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \uc218 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4\n task.wait(5)\n end;\n };\n Frame {\n Name = \"B\";\n [Event.Created] = function (self)\n print(self.Name .. \"\uac00 \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n end;\n };\n}\n \uc8fc\uc758 Event.CreatedAsync \uac00 \uc2e4\ud589\ub420 \ub54c\ub294 Parent \uac12\uc774 \uc815\ud574\uc9c0\uc9c0 \uc54a\uc558\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. self.Parent \ub294 \uc811\uadfc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4.
Event.Prop(propertyName:string)
\ud504\ub85c\ud37c\ud2f0 \uac12\uc774 \ubcc0\uacbd\ub428\uc744 \uc5f0\uacb0\ud569\ub2c8\ub2e4.
-- \uc6a9\ubc95\nTextBox {\n Text = \"\uc544\ubb34\uac70\ub098 \uc785\ub825\ud558\uc138\uc694\";\n [Event.Prop \"Text\"] = function (self,text)\n -- \ud3b8\uc758\uc0c1\uc758 \uc774\uc720\ub85c \ubcc0\uacbd\ub41c \uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4\n print(text)\n end;\n}\n "},{"location":"tutorial/6_tween/","title":"Tween - \ud2b8\uc708\ud6a8\uacfc","text":""},{"location":"tutorial/6_tween/#_1","title":"\ud2b8\uc704\ub2dd","text":"Quad\uc5d0\ub294 \ud2b8\uc708\uc744 \ub3c4\uc640\uc8fc\ub294 \ubaa8\ub4c8\uc774 \ub0b4\uc7a5\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud2b8\uc708 \ubaa8\ub4c8\uc740 \ub2e8\uc21c\ud55c Instance\ub4e4\uc744 \ub118\uc5b4\uc11c table \ud615\uc2dd\ub3c4 \ud2b8\uc708\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ub098\uc911\uc5d0 \ucee4\uc2a4\ud140 \uc624\ube0c\uc81d\ud2b8\ub97c \ud2b8\uc708\ud560 \ub54c \uc720\uc6a9\ud569\ub2c8\ub2e4. Quad \uc5d0\uc11c\ub294 \uc2e4\uc81c\ub85c \uc9c1\uc811\uc801\uc73c\ub85c Tween \uc744 \uc0ac\uc6a9\ud560 \uc77c\uc740 \uc801\uc73c\uba70 \ucd94\ud6c4 \uc124\uba85\ub418\ub294 register:Tween()\ub85c \uc0ac\uc6a9\ud558\ub294\uac83\uc774 \uad8c\uc7a5\ub429\ub2c8\ub2e4.
\ud2b8\uc708\uc740 \uc77c\ubc18\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc774 \uc218\ud589\ud569\ub2c8\ub2e4.
\uc6a9\ubc95\uc608\uc81c - \uc6c0\uc9c1\uc774\ub294 \ubc84\ud2bc Tween.RunTween(myFrame,{\n -- \ud2b8\uc708 \uc635\uc158\n Easing = Tween.Easing.Expo;\n Direction = Tween.Directions.Out;\n Time = 1;\n ...\n},{\n -- \ud504\ub85c\ud37c\ud2f0 \ubaa9\ub85d\n})\n \ud074\ub9ad\uc2dc \uc6c0\uc9c1\uc774\ub294 \ubc84\ud2bc\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Tween = Quad.Tween\n\nlocal Frame = Class \"Frame\"\nlocal TextButton = Class \"TextButton\"\nlocal on = false\n\nFrame \"mainFrame\" {\n Size = UDim2.fromOffset(300,300);\n BackgroundColor3 = Color3.fromRGB(255,255,255);\n TextButton \"Child\" {\n Text = \"Click Me!\";\n BackgroundColor3 = Color3.fromRGB(255,100,255);\n Position = UDim2.fromOffset(80,100);\n Size = UDim2.fromOffset(20,20);\n [Event \"MouseButton1Click\"] = function(self,x,y)\n on = not on\n Tween.RunTween(self,{\n -- \ud2b8\uc708 \uc635\uc158\uc785\ub2c8\ub2e4. \uc544\ub798\uc5d0\uc11c \uc124\uba85\ub429\ub2c8\ub2e4\n Easing = Tween.Easing.Expo;\n Direction = Tween.Directions.Out;\n Time = 1;\n },{\n -- \ud2b8\uc708\ud560 \ubaa9\ud45c \ud504\ub85c\ud37c\ud2f0\uc785\ub2c8\ub2e4\n Position = on\n and UDim2.fromOffset(200,100)\n or UDim2.fromOffset(80,100);\n })\n end;\n };\n}\n\nMount(ScreenGUI, Store.GetObejct(\"mainFrame\"))\n "},{"location":"tutorial/6_tween/#_2","title":"\ud2b8\uc708 \uc635\uc158","text":"\ud2b8\uc708\uc5d0\ub294 \ud2b8\uc708 \uc635\uc158\uc774 \ub4e4\uc5b4\uac00\uba70, \uc5ec\uae30\uc5d0\ub294 \ud2b8\uc708\uc758 \ubc29\ud5a5, \uac00\uac10\uc18d, \uc2dc\uac04 \ub4f1\uc744 \uc124\uc815\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub123\uc744 \uc218 \uc788\ub294 \ud2b8\uc708 \uc635\uc158\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
OPTION Time:number?
\ud2b8\uc708\uc758 \ucd1d \uae38\uc774\ub97c \uc815\ud569\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 1\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
OPTION Easing:string|(index:number)->number?
\ud2b8\uc708\uc758 \uac00\uac10\uc18d \uc815\ub3c4\ub97c \uacb0\uc815\ud569\ub2c8\ub2e4. \ubb38\uc790\uc5f4 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uac70\ub098, Tween.Easings.Linear\uc640 \uac19\uc774 \uc5f4\uac70\ud615 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud639\uc740 \ud544\uc694\uc5d0 \ub530\ub77c \ud568\uc218\ub97c \uc9c0\uc815\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ud568\uc218\ub97c Easing \uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c 1\ucc28 \uc9c4\ud589\ub3c4 (Linear, 0 \uc5d0\uc11c 1 \uc0ac\uc774\uc758 \uac12) \uac12\uc774 \uc8fc\uc5b4\uc9c0\uba70, \uacc4\uc0b0 \uacb0\uacfc\ub85c \uc2e4\uc81c \uc801\uc6a9\ub420 \uc704\uce58\ub97c \ubc18\ud658\ud574\uc57c\ud569\ub2c8\ub2e4. \ubc18\ud658\uac12\uc740 \uc74c\uc218\uc774\uac70\ub098 1 \ubcf4\ub2e4 \ud074 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 Exp2\uac00 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
type Easing =\n\"Linear\" // \uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615\n|\"Quint\" // 5 \uc81c\uacf1\n|\"Quart\" // \ub124\uc81c\uacf1\n|\"Cubic\" // \uc138\uc81c\uacf1\n|\"Quad\" // \uc81c\uacf1\n|\"Sin\" // \uc0ac\uc778 \ud30c\ud615\n|\"Circle\" // \uc0ac\ubd84\uc6d0\n|\"Expo\" // \uc9c0\uc218\ud615\n|\"Elastic\" // \ud0c4\uc131\n|\"Bounce\" // \ud280\uc5b4\uc624\ub984\n|\"Back\" // \ub4a4\ub85c \uac00\uac10\uc18d\n|\"Exp2\" // \ub35c \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 to 2\n|\"Exp4\" // \ub354 \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 ~ 4\n|EasingFunction?;\n \ud568\uc218\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \uc124\uba85\uacfc \ubbf8\ub9ac\ubcf4\uae30\ub294 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694 OPTION Direction:string?
\ud2b8\uc708\uc774 \uc9c4\ud589\ub418\ub294 \ubc29\ud5a5\uc785\ub2c8\ub2e4. \ubb38\uc790\uc5f4 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uac70\ub098, Tween.Directions.Out\uacfc \uac19\uc774 \uc5f4\uac70\ud615 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 Out\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
type Direction =\n// \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.\n\"Out\"\n// \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.\n|\"In\"\n//\uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.\n|\"InOut\"\n \ubc29\ud5a5\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \uc124\uba85\uacfc \ubbf8\ub9ac\ubcf4\uae30\ub294 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694 OPTION CallBack:{[number|\"*\"|string]:(Item:any, Alpha:number, AbsolutePercent:number)->()}?
\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uc2e4\ud589\uc911\uc778 \ub3c4\uc911\uc5d0 \ud568\uc218\ub97c \uc2e4\ud589\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud2b8\uc708\uc758 \uc9c4\ud589 \uc815\ub3c4\uc5d0 \ub530\ub77c\uc11c \ud55c\ubc88 \ud568\uc218\uac00 \uc2e4\ud589\ub418\uac70\ub098 \ud2b8\uc708 \uc9c4\ud589\uc911 \uacc4\uc18d\ud574\uc11c \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc778\ub371\uc2a4\uac00 \uc22b\uc790\uc778 \uacbd\uc6b0 \ud574\ub2f9 \uc9c0\uc810\uc744 \ub118\uc744 \ub54c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc73c\uba70, \"*\" \ub97c \uc778\ub371\uc2a4\ub85c \uc0ac\uc6a9\ud558\uba74 \ubaa8\ub4e0 \ubd80\ubd84\uc5d0\uc11c \ud568\uc218\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4. \ud568\uc218\uc5d0\ub294 \ud3b8\uc758\uc0c1 \ud2b8\uc708\uc744 \ud558\uace0\uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \uc704\uce58\uac12, \uc2dc\uac04\ub9cc\uc744 \uace0\ub824\ud55c 1\ucc28 \uc704\uce58\uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
OPTION OnStepped:(Item:any, Alpha:number, AbsolutePercent:number)->()?
CallBack \uc5d0 \"*\" \ub97c \ub123\uc740\uac83\uacfc \ub3d9\uc77c\ud55c \ud6a8\uacfc\ub97c \uac00\uc9c0\ub294 \ubcc4\uce6d\uc785\ub2c8\ub2e4
OPTION Ended:(Item:any, Alpha:number, AbsolutePercent:number)->()?
CallBack \uc5d0 1\uc744 \ub123\uc740\uac83\uacfc \ub3d9\uc77c\ud55c \ud6a8\uacfc\ub97c \uac00\uc9c0\ub294 \ubcc4\uce6d\uc785\ub2c8\ub2e4
OPTION Getter:(Item:any, Property:string)->any?
\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uac12\uc744 \uc5bb\uc73c\ub824 \ud560 \ub54c \uc0ac\uc6a9\ud560 \ud568\uc218\uc785\ub2c8\ub2e4. \ud568\uc218\uc5d0 \ud2b8\uc708\ud558\uace0 \uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \ud504\ub85c\ud37c\ud2f0 \uc774\ub984\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
Warning register:Tween() \uc640 \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
OPTION Getter:(Item:any, Property:string, Value:Lerpable)->any?
\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uac12\uc744 \uc124\uc815\ud558\ub824 \ud560 \ub54c \uc0ac\uc6a9\ud560 \ud568\uc218\uc785\ub2c8\ub2e4. \ud568\uc218\uc5d0 \ud2b8\uc708\ud558\uace0 \uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \ud504\ub85c\ud37c\ud2f0 \uc774\ub984, \uc124\uc815\ud560 \uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
Warning register:Tween() \uc640 \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
"},{"location":"tutorial/6_tween/#_3","title":"\ud2b8\uc708 \ud568\uc218","text":"Quad \uc758 \ud2b8\uc708\uc5d0\ub294 \ud2b8\uc708\uc744 \uba48\ucd94\uac70\ub098 \ud2b8\uc708\uc911\uc778\uc9c0 \ud655\uc778\ud558\ub294 \ub4f1\uc758 \uc791\uc5c5\uc744 \ud560 \uc218 \uc788\ub294 \uc5ec\ub7ec \ud568\uc218\ub4e4\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
"},{"location":"tutorial/7_quadProperty/","title":"QuadProperty - \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0","text":"\uc8fc\uc758\uc0ac\ud56d \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0\ub294 Tween \uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 register\uc758 :Tween()\uc758 \uacbd\uc6b0 \ud638\ud658\ub418\ubbc0\ub85c, \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0 \uac12\uc744 \ud2b8\uc708\ud558\ub824\uba74 \ud5a5\ud6c4 \uc124\uba85\ub418\ub294 register \uc640 \ud568\uae68 \uc0ac\uc6a9\ud574\uc57c\ud569\ub2c8\ub2e4.
Tween.RunTween, Tween.RunTweens \uc640\ub294 \uac19\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
"},{"location":"tutorial/7_quadProperty/#_1","title":"\ud2b9\uc218\ud55c \ud504\ub85c\ud37c\ud2f0","text":"Quad \uc5d0\uc11c\ub294 \ud3b8\ub9ac\uc131\uc744 \uc704\ud574 \uc77c\ubd80 \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ubaa8\ub4e0 \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0\ub294 \ud5a5\ud6c4 \uc18c\uac1c\ub418\ub294 register\uc640 \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal ImageFrame = Class \"ImageFrame\"\nImageFrame.BackgroundTransparency = 1\n\nFrame \"mainFrame\" {\n Size = UDim2.fromOffset(200,200);\n PaddingAllOffset = 50; -- Padding \uc744 50 \uc529 \ubaa8\ub4e0 \ubc29\ud5a5\uc73c\ub85c \uc90d\ub2c8\ub2e4\n BackgroundColor3 = Color3.fromRGB(40,40,40);\n ImageFrame {\n ImageColor3 = Color3.fromRGB(60,60,60);\n RoundSize = 16; -- \uc774\ubbf8\uc9c0\ub85c \ub77c\uc6b4\ub4dc \ud504\ub808\uc784\uc744 \ub9cc\ub4ed\ub2c8\ub2e4\n Size = UDim2.fromScale(1,1);\n ImageFrame {\n BackgroundColor3 = Color3.fromRGB(80,80,80);\n };\n };\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud504\ub85c\ud37c\ud2f0\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
RoundSize:number?
ImageLabel, ImageButton \uc5d0\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc18d\uc131\uc785\ub2c8\ub2e4. \uc6d0\ud615 \uc774\ubbf8\uc9c0\uc5d0 Slice\ub97c \uc774\uc6a9\ud574 \ub465\uadfc \ud504\ub808\uc784\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c UICorner\ubcf4\ub2e4 \ubd80\ub4dc\ub7ec\uc6b4 \ucf54\ub108\ud6a8\uacfc\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.
Corner:number?
\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 UI\uc624\ube0c\uc81d\ud2b8\uc5d0 \uc801\uc6a9\ub429\ub2c8\ub2e4. UICorner\ub97c \uc774\uc6a9\ud574 \ubaa8\uc11c\ub9ac \ubd80\ubd84\uc744 \ub465\uae00\uac8c \ub9cc\ub4ed\ub2c8\ub2e4. \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
PaddingAll:UDim?
UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. \uc0c1\ud558\uc88c\uc6b0 \ubaa8\ub450 \uac19\uc740 \uac12\uc73c\ub85c \uc801\uc6a9\ub429\ub2c8\ub2e4. PaddingAllOffset \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
PaddingAllOffset:number?
UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. PaddingAll\uacfc \uac19\uc740 \ubc29\ubc95\uc73c\ub85c \uc791\ub3d9\ud558\ub098, Offset\uac12\ub9cc \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. PaddingAll \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
Scale:number?
UIScale\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. UIScale.Scale \uacfc \uac19\uc740 \ud6a8\uacfc\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4
"},{"location":"tutorial/8_register/","title":"Register - \uac12 \ubcc0\uacbd \uc5f0\ub3d9","text":"\uc77d\uae30 \uc804... \ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Store.GetStore \uac00 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Store.GetStore \ub294 \uacf5\uc720\ub429\ub2c8\ub2e4
"},{"location":"tutorial/8_register/#_1","title":"\ub808\uc9c0\uc2a4\ud130","text":"\ub808\uc9c0\uc2a4\ud130\ub294 \ud55c \uac12\uc774 \ubcc0\uacbd\ub420 \ub54c, \uadf8 \uac12\uc744 \uc0ac\uc6a9\ud55c \uacf3\uc774 \uc5c5\ub370\uc774\ud2b8 \ub420 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4e4\uc5b4\uc8fc\ub294 Quad \uc758 \uc8fc\uc694 \uae30\uc220\uc785\ub2c8\ub2e4. \ucd94\ud6c4 \uc124\uba85\ub420 Class.Extend \uc640\ub3c4 \uac19\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
\ub808\uc9c0\uc2a4\ud130\ub294 \uc774\ub7ec\ud55c \uc2dc\ub098\ub9ac\uc624\uc5d0\uc11c \uc0ac\uc6a9\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
UI \uc758 \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub97c \ud55c\ubc88\uc5d0 \ud398\uc774\ub4dc \uc544\uc6c3 \ud639\uc740 \ud398\uc774\ub4dc \uc778 \uc2dc\ud0a4\ub294 \uacbd\uc6b0. \uac00\ubcc0 \ud06c\uae30\uc758 UI \ub97c \uc5c5\ub370\uc774\ud2b8 \uc2dc\ud0a4\ub294 \uacbd\uc6b0. \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \ud55c\uaebc\ubc88\uc5d0 \ud2b8\uc708\uc2dc\ud0a4\ub294 \uacbd\uc6b0. \ub2e4\ud06c\ud14c\ub9c8/\ud654\uc774\ud2b8\ud14c\ub9c8 \ubcc0\uacbd\ud560 \uc218 \uc788\uac8c \ub9cc\ub4dc\ub294 \uacbd\uc6b0. \uc774\uc678\uc5d0\ub3c4 \ub808\uc9c0\uc2a4\ud130\uc758 \ud65c\uc6a9 \ubc29\ubc95\uc740 \ubb34\uad81\ubb34\uc9c4\ud569\ub2c8\ub2e4. \ub808\uc9c0\uc2a4\ud130\uc758 \uc0ac\uc6a9\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
local myStore = Store.GetStore(\"myStore\")\nmyStore.color = Color3.fromRGB(255,255,255)\nFrame { BackgroundColor3 = myStore \"color\" }\n-- \uc5f0\ub3d9\ub41c \ud504\ub808\uc784\ub3c4 \uc5c5\ub370\uc774\ud2b8 \ub429\ub2c8\ub2e4\nmyStore.color = Color3.fromRGB(0,0,0)\n \uc2a4\ud1a0\uc5b4\ub97c \uc0dd\uc131\ud568. \uae30\ubcf8 \uac12\uc744 \uc124\uc815\ud568. \uc2a4\ud1a0\uc5b4\ub97c \ud638\ucd9c\ud574 \ub808\uc9c0\uc2a4\ud130\ub97c \uc5bb\uc5b4 \ub4f1\ub85d\ud568. \uc608\uc2dc \ucf54\ub4dc\ub85c \uc815\ud655\ud558\uac8c \ud655\uc778\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\n-- \ub808\uc9c0\uc2a4\ud130\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub294 \ud14c\uc774\ube14\uc744 \ub9cc\ub4ed\ub2c8\ub2e4.\n-- \uc5ec\uae30\uc5d0 \ub2f4\uc544\ub0b4\ub294 \uac12\uc744 \uc5c5\ub370\uc774\ud2b8 \ud558\ub294 \uacbd\uc6b0 \ub808\uc9c0\uc2a4\ud130\ub85c \uc5f0\uacb0\ub41c\n-- \uc624\ube0c\uc81d\ud2b8\ub4e4\ub3c4 \uac19\uc774 \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4.\nlocal myStore = Store.GetStore(\"myStore\")\nlocal TextLabel = Class \"TextLabel\"\n\nmyStore.Text = \"0 \ucd08 \uc9c0\ub0a8\"\nmyStore.Color = Color3.fromRGB(255,100,255)\n\nTextLabel \"mainLabel\" {\n Size = UDim2.fromOffset(100,200);\n -- myStore \uc758 Text \uac12\uc774 \ubcc0\uacbd\ub428\uc744 \ucd94\uc801\ud558\uace0, Text \uac12\uc744\n -- \uc5c5\ub370\uc774\ud2b8 \uc2dc\ud0b5\ub2c8\ub2e4.\n Text = myStore \"Text\";\n\n -- \uc774\uac83\uc740 \ub808\uc9c0\uc2a4\ud130\ub97c \uc0ac\uc6a9\ud558\ub294\uac83\uc774 \uc544\ub2c8\ub77c \ub2e8\uc21c\ud788 \uac12\ub9cc\n -- \ubd88\ub7ec\uc640 \ub123\uc5b4\uc8fc\ub294 \uac83\uc785\ub2c8\ub2e4. \uc790\ub3d9 \uc5c5\ub370\uc774\ud2b8\uac00 \uac00\ub2a5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n BackgroundColor3 = myStore.Color;\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainLabel\"))\n\n-- \ubc14\uafb8\ub354\ub77c\ub3c4 \ub808\uc9c0\uc2a4\ud130\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc544 \ubc18\uc601\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\nmyStore.Color = Color3.fromRGB(255,255,255)\n\nlocal Count = 1\nwhile task.wait(1) do\n -- \uac12\uc744 \uc5c5\ub370\uc774\ud2b8 \ud569\ub2c8\ub2e4. \ud14d\uc2a4\ud2b8 \ub77c\ubca8\ub3c4\n -- \uc790\ub3d9\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8 \ub429\ub2c8\ub2e4.\n myStore.Text = Count .. \" \ucd08 \uc9c0\ub0a8\"\n Count = Count + 1\nend\n "},{"location":"tutorial/8_register/#_2","title":"\ub808\uc9c0\uc2a4\ud130 \uba54\uc18c\ub4dc","text":"\ub808\uc9c0\uc2a4\ud130\uc5d0\ub294 \uc5ec\ub7ec\uac00\uc9c0 \uba54\uc18c\ub4dc\uac00 \ub2f4\uaca8\uc788\uc2b5\ub2c8\ub2e4. \uc774 \uba54\uc18c\ub4dc\ub97c \uc0ac\uc6a9\ud558\uba74 \ub808\uc9c0\uc2a4\ud130\ub97c \ubcf4\ub2e4 \ub354 \ub2e4\uc591\ud558\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
register \ud2b9\uc218 \uba54\uc18c\ub4dc\uac00 \uc801\uc6a9\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
:Add(value:any)->register
\uac12\uc5d0 \ub354\ud558\uae30\ub97c \ucde8\ud569\ub2c8\ub2e4. \uc74c\uc218\ud615\ud0dc\uac00 \uc81c\uacf5\ub418\ub294 \uacbd\uc6b0 \ube7c\uae30 \ucc98\ub7fc \uc791\ub3d9\ud569\ub2c8\ub2e4. number, Udim, UDim2, Color3, Vector2 \ub4f1 \ub354\ud560 \uc218 \uc788\ub294 \ubaa8\ub4e0\uac83\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 \uc8fc\uc758 : \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.pos = UDim2.fromOffset(100,0)\n\nFrame \"mainFrame\" {\n Position = myStore \"pos\":Add(UDim2.fromOffset(0,100));\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile true do\n myStore.pos = myStore.pos + UDim2.fromOffset(10,0)\n task.wait(2)\nend\n :With((store:valueStore, newValue:any, key:string)->())->register
\ud568\uc218 \ub610\ub294 \ud14c\uc774\ube14\uc5d0\uc11c \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4. Add \ubcf4\ub2e4 \ub098\uc911\uc5d0 \uc218\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4
\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \ud568\uc218\uc608\uc81c - \ud14c\uc774\ube14 myStore \"size\":With(function (_,value)\n return value * 2\nend)\n width \uac12\uc5d0 \ub9de\ucdb0 \uc790\ub3d9\uc73c\ub85c UI \uac00 \uc5c5\ub370\uc774\ud2b8\ub418\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.topbarSize = 60\nmyStore.width = 200\n\n-- \ub808\uc9c0\uc2a4\ud130\ub97c \ubcc0\uc218\ub85c \ub450\uace0 \uc0ac\uc6a9\ud569\ub2c8\ub2e4\nlocal listItemSize = myStore \"width\":With(function()\n return UDim2.fromOffset(myStore.width,60)\nend)\n\nFrame \"mainFrame\" {\n Class \"UIListLayout\" { SortOrder = Enum.SortOrder.LayoutOrder };\n\n -- \uc0ac\uc774\uc988\uac00 width \uc5d0 \ub9de\uac8c \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4\n Size = myStore \"width\":With(function ()\n return UDim.fromOffset(store.width,400)\n end);\n\n Frame \"Topbar\" {\n LayoutOrder = 1;\n BackgroundColor3 = Color3.fromRGB(255,0,0);\n -- \uc774\ub807\uac8c \uc5ec\ub7ec \uac12\uc744 \ubb36\uc5b4\uc11c \ub450 \uac12\uc774 \ubcc0\uacbd\ub428, \ud639\uc740 \uadf8\uc774\uc0c1\uc744\n -- \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n Size = myStore \"topbarSize,width\":With(function()\n return UDim2.fromOffset(myStore.width,myStore.topbarSize)\n end);\n }\n Frame \"ListItem\" {\n LayoutOrder = 2;\n BackgroundColor3 = Color3.fromRGB(0,255,0);\n Size = listItemSize;\n };\n Frame \"ListItem\" {\n LayoutOrder = 3;\n BackgroundColor3 = Color3.fromRGB(0,0,255);\n Size = listItemSize;\n };\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- width \uac12\uc744 \ubcc0\uacbd\ud574\ubcf4\uc138\uc694\nwhile true do\n myStore.width = myStore.width + 10\n task.wait(1)\nend\n colors \ud14c\uc774\ube14 \uc548\uc5d0 \uc788\ub294 \uc0c9\uae54\ub4e4\uc744 \ub3cc\uc544\uac00\uba70 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nlocal colors = {\n Color3.fromRGB(255,255,255);\n Color3.fromRGB(255,255,0);\n Color3.fromRGB(0,255,255);\n Color3.fromRGB(255,0,255);\n Color3.fromRGB(255,0,0);\n Color3.fromRGB(0,255,0);\n Color3.fromRGB(0,0,255);\n}\nmyStore.color = 1\n\nFrame \"mainFrame\" {\n Size = UDim2.fromOffset(200,200);\n -- colors \uc5d0\uc11c \uc778\ub371\uc2f1\ud574 \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4\n BackgroundColor3 = myStore \"color\":With(colors);\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- \uc778\ub371\uc2a4\ub97c \uc21c\ud68c\ud569\ub2c8\ub2e4\nwhile task.wait(1) do\n myStore.color = (i-1)%(#colors)+2\nend\n \uc8fc\uc758 \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
:Tween(options:TweenOptions)->register
\ud2b8\uc708\uc744 \uc774\uc6a9\ud574 \ubcc0\uacbd\uc0ac\ud56d\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4(\ucc98\uc74c \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc74c) \uc635\uc158\uc740 Tween \ubb38\uc11c\uc5d0 \ub098\uc640\uc788\ub294 \uc635\uc158\uacfc \uac19\uc2b5\ub2c8\ub2e4.
\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \ud55c\uaebc\ubc88\uc5d0 \uc774\ub3d9 -- Tween \uc635\uc158\uc744 \ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nmyStore \"size\":Tween{ Time = 2 }\n \ud504\ub808\uc784\uc744 \ud55c\uaebc\ubc88\uc5d0 \uc6c0\uc9c1\uc785\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\nmyStore.pos = UDim2.fromOffset(50,0)\nStyle \"TweenFrame\" {\n Size = UDim2.fromOffset(50,50);\n BackgroundColor3 = Color3.fromRGB(255,100,255);\n}\n\nFrame \"mainFrame\" {\n BackgroundColor3 = Color3.fromRGB(255,255,255);\n Size = UDim2.fromOffset(500,500);\n Frame \"TweenFrame\" {\n Position = myStore \"pos\":Tween{Time = 2};\n };\n Frame \"TweenFrame\" {\n Position = myStore \"pos\"\n :Add(UDim2.fromOffset(0,100))\n :Tween{Time = 2};\n };\n Frame \"TweenFrame\" {\n Position = myStore \"pos\"\n :Add(UDim2.fromOffset(0,200))\n :Tween{Time = 2};\n };\n Frame \"TweenFrame\" {\n Position = myStore \"pos\"\n :Add(UDim2.fromOffset(0,300))\n :Tween{Time = 2};\n }\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nlocal on = false\nwhile true do\n on = not on\n myStore.pos = on and UDim2.fromOffset(400,0) or UDim2.fromOffset(50,0)\n task.wait(1.5) -- \ud2b8\uc708\uc740 \ub36e\uc5b4 \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n -- \ub530\ub77c\uc11c 2 \ucd08\uc778 \uae38\uc774\ubcf4\ub2e4 \ub354 \ube68\ub9ac \ubc14\uafd4\ub3c4 \uc624\ub958\uac00 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\nend\n \uc8fc\uc758 \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
:Default(value:any)->register
\uae30\ubcf8\uac12\uc744 \uc815\ud569\ub2c8\ub2e4. \ub9cc\uc57d \uac12\uc774 nil \uc778 \uacbd\uc6b0 \uc774 \uac12\uc744 \uc0ac\uc6a9\ud558\uac8c \ub429\ub2c8\ub2e4. Add \ub098 With \ub4f1 \ub2e4\ub978\uac83\uc5d0 \uc601\ud5a5\ubc1b\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nFrame \"mainFrame\" {\n Size = UDim2.fromOffset(200,200);\n -- color \uac12\uc774 \uc5c6\uc73c\ubbc0\ub85c Default \uc548\uc758 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.\n BackgroundColor3 = myStore \"color\"\n :Default(Color3.fromRGB(255,0,0));\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\ntask.wait(5)\nmyStore.color = Color3.fromRGB(0,255,0)\n \uc8fc\uc758 \ucc98\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \ub54c\uc5d0\ub9cc \uc774 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4. :Register(<INPUT>(store:valueStore, newValue:any, key:string)->())->INPUT
\ub808\uc9c0\uc2a4\ud130\uc5d0 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4. \uac12\uc774 \ubcc0\uacbd\ub418\uba74 \ud568\uc218\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4
newValue \uc5d0\ub294 :Add, :With, :Tween, :Default \uac00 \ub530\ub85c \uacc4\uc0b0\ub418\uc9c0 \uc54a\uc73c\uba70, \uc124\uc815\ub41c \uac12\uc744 \uc544\ubb34 \uac00\uacf5 \uc5c6\uc774 \uc81c\uacf5\ud569\ub2c8\ub2e4
\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \uc5ec\ub7ec \ubcc0\uacbd\uc0ac\ud56d \ucd94\uc801 myStore.test = 1\n-- \ubc18\ud658 \uac12\uc740 \uc785\ub825\uc73c\ub85c \ub123\uc740 \ud568\uc218\uc785\ub2c8\ub2e4. !\uaf2d \uc800\uc7a5\ud574\uc57c\ud569\ub2c8\ub2e4\n-- :Register \ub294 \ud568\uc218\uac00 \uc0ac\ub77c\uc9c0\uc9c0 \uc54a\ub3c4\ub85d \uac12\uc744 \uc720\uc9c0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\n-- \ub9cc\uc57d \ubc84\ub9b4 \uacbd\uc6b0 \uc77c\uc815 \uc2dc\uac04 \ub4a4 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nlocal func = myStore \"test\":Register(function(_,newValue)\n -- \uac12 \ubcc0\uacbd\uc2dc \ucd9c\ub825\ub429\ub2c8\ub2e4\n print(newValue)\nend)\nmyStore.test = 2\n myStore.test1, myStore.test2 \uac00 \ubcc0\ud654\ud558\uba74 print \ud568\uc218\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.
local Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\n\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.test1 = 1\nmyStore.test2 = \"Hello\"\n\nlocal func = myStore \"test1,test2\":Register(function()\n print(myStore.test1,myStore.test2)\nend)\n\nmyStore.test1 = 2\n \uc8fc\uc758 Register \uc548\uc5d0 \ub4e4\uc5b4\uac04 \ud568\uc218\ub294 GC \uc548\uc815\uc131\uc744 \uc704\ud574\uc11c \uc57d\ud55c \ucc38\uc870\ub85c \uc800\uc7a5\ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c \ud568\uc218\ub97c \uc800\uc7a5\ud574\uc57c\ud569\ub2c8\ub2e4.
"},{"location":"tutorial/9_lang/","title":"\uc5b8\uc5b4\uad00\ub9ac","text":"\uc77d\uae30 \uc804... \ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Lang \uae30\ub2a5\uc774 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Lang \uc740 \uacf5\uc720\ub429\ub2c8\ub2e4
"},{"location":"tutorial/9_lang/#_2","title":"\uc5b8\uc5b4\uad00\ub9ac","text":"Quad \uc5d0\ub294 \uadc0\ucc2e\uc740 \uc5b8\uc5b4\uad00\ub9ac\ub97c \uc790\ub3d9\uc73c\ub85c \ud574\uc8fc\ub294 \uae30\ub2a5\uc774 \ub0b4\uc7a5\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 register \uc640 \uc5f0\ub3d9\ud574 \uc801\uc740 \uc904\uc758 \ucf54\ub4dc\ub85c \ubcc0\ud558\ub294 \ud14d\uc2a4\ud2b8\ub3c4 \uc5b8\uc5b4\uc5d0 \ub9de\uac8c \ucd9c\ub825\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Mount = Quad.Mount\nlocal Event = Quad.Event\nlocal Lang = Quad.Lang\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myStore = Store.GetStore(\"myStore\")\nmyStore.count = 0\n\nLang.New(\"TimePassed\",{\n [Lang.Locales.Korean] = \"{count}\ucd08 \uc9c0\ub0ac\uc5b4\uc694\";\n [Lang.Locales.Default] = function (options)\n -- \ud568\uc218 \ub610\ud55c \ub4f1\ub85d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n if options.count > 1 then\n return (\"%d seconds passed\"):format(options.count)\n else\n return (\"%d second passed\"):format(options.count)\n end\n end;\n})\n\nTextButton \"mainButton\" {\n Size = UDim2.fromOffset(100,100);\n Text = Lang \"TimePassed\" {\n -- count = 1 \uc77c\ubc18\uc801\uc778 \uac12\ub3c4 \uc0ac\uc6a9\uac00\ub2a5\ud569\ub2c8\ub2e4\n count = myStore \"count\";\n };\n [Event \"MouseButton1Click\"] = function()\n -- \ud074\ub9ad\uc2dc \uc5b8\uc5b4\uac00 \ubcc0\uacbd\ub429\ub2c8\ub2e4\n if Lang.CurrentLocale == Lang.Locales.Default then\n Lang.CurrentLocale = Lang.Locales.Korean\n else\n Lang.CurrentLocale = Lang.Locales.Default\n end\n end\n}\nMount(ScreenGUIk,Store.GetObject(\"mainButton\"))\n\nwhile task.wait(1) do\n myStore.count = myStore.count + 1\nend\n "},{"location":"tutorial/9_lang/#locale","title":"Locale \ubaa9\ub85d","text":"\ub85c\ucf00\uc77c \uac12\ub4e4\uc740 Lang.Locales\uc5d0\uc11c \uac00\uc838\uc62c \uc218 \uc788\uc73c\uba70, \uc0ac\uc6a9\uac00\ub2a5\ud55c \ub85c\ucf00\uc77c \ubaa9\ub85d\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
Default (default) English (en_us) Spanish (es_es) French (fr_fr) Indonesian (id_id) Italian (it_it) Japanese (ja_jp) Korean (ko_kr) Russian (ru_ru) Thai (th_th) Turkish (tr_tr) Vietnamese (vi_vn) Portuguese (pt_br) German (de_de) ChineseSimplified (zh_cn) ChineseTraditional (zh_tw) Bulgarian (bg_bg) Bengali (bn_bd) Czech (cs_cz) Danish (da_dk) Greek (el_gr) Estonian (et_ee) Finnish (fi_fi) Hindi (hi_in) Croatian (hr_hr) Hungarian (hu_hu) Georgian (ka_ge) Kazakh (kk_kz) Khmer (km_kh) Lithuanian (lt_lt) Latvian (lv_lv) Malay (ms_my) Burmese (my_mm) Bokmal (nb_no) Dutch (nl_nl) Filipino (fil_ph) Polish (pl_pl) Romanian (ro_ro) Ukrainian (uk_ua) Sinhala (si_lk) Slovak (sk_sk) Slovenian (sl_sl) Albanian (sq_al) Bosnian (bs_ba) Serbian (sr_rs) Swedish (sv_se) Arabic (ar_001)
"}]}
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":[" "]},"docs":[{"location":"","title":"Quad","text":"\ucc98\uc74c\uc624\uc168\ub098\uc694? \ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c\ub97c \uc77d\uc5b4\ubcf4\uc138\uc694! \ucc98\uc74c\ubd80\ud130 \ucc28\uadfc\ucc28\uadfc Quad \ubaa8\ub4c8\uc744 \uc815\ubcf5\ud560 \uc218 \uc788\uc5b4\uc694
"},{"location":"#_1","title":"\ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c \ubaa9\ucc28","text":""},{"location":"#api","title":"API \ub808\ud37c\ub7f0\uc2a4","text":"class __call, import class extend private ~~make~~
event __call prop created createdSync disconnecter private ~~bind~~
mount __call mount => mountClass|mountsClass class mountClass|mountsClass
store getObject getObjects => objectList addObject class objectList class store
style private ~~parseStyles~~ __call new
tween (from @qwreey75:AdvancedTween)
"},{"location":"#_2","title":"\uc9c4\ud589\uc911\uc774\uac70\ub098 \uac80\ud1a0\uc911","text":""},{"location":"#spring","title":"Spring","text":"Spring \ubb3c\ub9ac \uacc4\uc0b0\uc744 UI \uc560\ub2c8\uba54\uc774\uc158\uc5d0 \uc801\uc6a9\ud569\ub2c8\ub2e4 WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#quad-debuger","title":"Quad Debuger","text":"Register \uc758 \uc0c1\ud0dc\uc640 Store \uc758 \uac12, Class \uc758 \ub3d9\uc791 \uc5ec\ubd80 \ub4f1 Quad \uc758 \uc5ec\ub7ec \uc790\uc6d0\uc744 \uae34\ubc00\ud558\uac8c \ub514\ubc84\uadf8\ud569\ub2c8\ub2e4. WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#selection","title":"Selection","text":"Tab \ud0a4\ub4f1\uc73c\ub85c \ubc84\ud2bc \uc120\ud0dd\ud558\uae30 (... \uac00\ub2a5\ud568?) WIP. \uac80\ud1a0\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#quad-component-studio","title":"Quad Component Studio","text":"\ub208\uc5d0 \ubcf4\uc774\ub294 \uc6cc\uc9c0\uc6cc\uadf8\uc2dd \ud3b8\uc9d1\uae30\ub97c \uc774\uc6a9\ud574 Quad Class \ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#quad-webrender","title":"Quad WebRender","text":"HTML, CSS, JS \ub85c\uc368 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ubcc0\ud615\ud574 \uc2a4\ud29c\ub514\uc624 \uc5c6\uc774 \uac1c\ubc1c\ud558\ub294 \uac00\ubcbc\uc6b4 \uac1c\ubc1c\ubc95\uc785\ub2c8\ub2e4. WIP. \uac80\ud1a0\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"changelogs/","title":"\ubc84\uc804 \ubc88\uacbd\uc0ac\ud56d","text":""},{"location":"changelogs/#222","title":"2.22","text":"\ub354\uc774\uc0c1 Event.Prop \uac00 \ucc98\uc74c \uc0dd\uc131\uc2dc \uc2e4\ud589\ub418\ub294 \uc77c\uc774 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#221","title":"2.21","text":"Linker \uac00 \uc774\uc81c \ud074\ub798\uc2a4 \uc548 \ud074\ub798\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ub420 \uc218 \uc788\ub3c4\ub85d \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#220","title":"2.20","text":"Docments \uac00 \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub9ce\uc740\uc591\uc758 \uc0c8\ub85c\uc6b4 \ud29c\ud1a0\ub9ac\uc5bc\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4. Mkdocs \ud14c\ub9c8\uc640 \uc5ec\ub7ec\uac00\uc9c0 \uc124\uc815\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c Makefile \uc744 \ud1b5\ud574\uc11c rojo build \uc640 mkdocs build \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#219","title":"2.19","text":"Linker \uac1d\uccb4\uac00 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c GetPropertyChangedSignal \uc640, self \uc5d0 \ud2b9\uc815 \uc624\ube0c\uc81d\ud2b8 \ud639\uc740 \uc774\ubca4\ud2b8\ub97c \uc5f0\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#218","title":"2.18","text":"\uc774\uc81c \ub354\uc774\uc0c1 GC \uc5d0 \uc758\ud574 Store \uc758 Instance \uac12\uc774 \uc190\uc2e4\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#217","title":"2.17","text":"Tween \uc758 CallBack \ub4f1\ub85d \uc2dc \uc8fc\uc5b8\uc9c0\ub294 \ud30c\ub77c\uba54\ud130\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ub354\uc774\uc0c1 ~ \ubb38\uc774 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#215-breaking-changes","title":"2.15 BREAKING CHANGES","text":"\uc774\uc81c Lang \uc5d0\uc11c CurrentLocale, FailedMessage \uc744 \ubcc0\uacbd\ud558\uba74 \uc790\ub3d9\uc73c\ub85c \ubcc0\uacbd\uc0ac\ud56d\uc774 \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4. \ub610\ud55c \uc77c\ubd80 \ud544\ub4dc\uc758 \ub124\uc774\ubc0d\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#214","title":"2.14","text":"Lang \ubaa8\ub4c8\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. register \ub97c \uc0ac\uc6a9\ud574 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ub2e4\uc911\uc5b8\uc5b4 \uc9c0\uc6d0\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#213","title":"2.13","text":"Signal \ubaa8\ub4c8\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c Class.Extend \uc5d0\uc11c GetPropertyChangedSignal \uacfc EmitPropertyChangedSignal \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#212","title":"2.12","text":"Mount \ubc18\ud658 \uac1d\uccb4\uc5d0 Add \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d Mount \uac1d\uccb4\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#211","title":"2.11","text":"Store.GetObjects \uc5d0 \uc774\uc81c & \ubb38\ubc95\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#29","title":"2.9","text":"PreloadAsync \ub97c \ud1b5\ud574 \uc774\uc81c round.lua \uc5d0\uc11c \ub77c\uc6b4\ub4dc \uc774\ubbf8\uc9c0\ub97c \ubbf8\ub9ac \ub85c\ub4dc\ud569\ub2c8\ub2e4.
"},{"location":"changelogs/#28","title":"2.8","text":"\ubc18\ud658 \uad00\ub828 \ucf54\ub4dc\uac00 exports \ub85c \uc774\uc8fc\ub418\uc5c8\uc73c\uba70. init.lua \uc5d0\uc11c\ub294 \uc790\ub3d9\uc801\uc73c\ub85c types \ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.
"},{"location":"changelogs/#27","title":"2.7","text":"\uc774\uc81c types \ub97c \uc644\uc804\ud788 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc9c1\uc811 \ubd88\ub7ec\uc640 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#2126-breaking-changes","title":"2.1~2.6 BREAKING CHANGES","text":"\ubaa8\ub4e0 \ubaa8\ub4c8\uc758 \ud544\ub4dc\uc758 \uc774\ub984\uc774 \ubcc0\uacbd\ub418\uc5c8\uc73c\uba70, \ubaa8\ub4e0 \ud074\ub798\uc2a4\ub4e4\uc774 \uae30\ubcf8\uc801\uc73c\ub85c \ub300\ubb38\uc790 \uc2dc\uc791 \ub124\uc774\ubc0d\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \uba85\uba85\uaddc\uce59\uc744 \ubcc0\uacbd\ud588\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#20","title":"2.0","text":"\ubc84\uc804 \ud310\uc62c\ub9bc, BREAKING CHANGES \ub97c \uc704\ud574 \ubc84\uc804\uc744 \ud310\uc62c\ub9bc \ud558\uc600\uc2b5\ub2c8\ub2e4.
"},{"location":"license/","title":"\ub77c\uc774\uc120\uc2a4","text":"KoreanEnglish qwreeykawaii license v1.3\nCopyright 2023. Qwreey [qwreey75@gmail.com]\n\n\uc774 \ub77c\uc774\uc120\uc2a4\ub294 DBAD \ub77c\uc774\uc120\uc2a4\ub97c \uae30\ubc18\uc73c\ub85c \ud569\ub2c8\ub2e4.\n\ub204\uad6c\ub4e0\uc9c0 \uc774 \ub77c\uc774\uc120\uc2a4 \ubb38\uc11c\uc758 \uc6d0\ubcf8 \ud639\uc740 \uc218\uc815\ubcf8\uc744\n\ubcf5\uc0ac, \ud3b8\uc9d1, \ubc30\ud3ec \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\nqwreeykawaii \ub77c\uc774\uc120\uc2a4\uc758 \ubcf5\uc0ac \ubc30\ud3ec \ubc0f \uc218\uc815\uc5d0\n\uad00\ud55c \uaddc\uc815\uacfc \uc870\uac74.\n\n1. \ub2f9\uc2e0\uc740 \uc774 \uadc0\uc5ec\uc6b4 \ucc3d\uc791\ubb3c\uc744 \uac00\uc9c0\uace0 \uc5b4\ub5a0\ud55c\n\uac83\uc774\ub4e0 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e8, \ubb34\ub840\ud558\uc9c0 \ub9c8\uc138\uc694.\n\ubb34\ub840\ud55c \ud589\ub3d9\uc740 \ud1b5\uc0c1\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\n\n\uac00. \uadc0\uc5ec\uc6b4 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc5b4\ub5a0\ud55c \uac00\uacf5\ub3c4 \uc5c6\uc774\n \ubcf5\uc81c\ud558\uac70\ub098, \uc774\ub984\ub9cc \ubc14\uafb8\ub294 \uac83\uc740 \ubb34\ub840\ud558\uba70\n \ub178\uace8\uc801\uc778 \uc800\uc791\uad8c \uce68\ud574\uc785\ub2c8\ub2e4.\n\ub098. \uadc0\uc5ec\uc6b4 \uc774 \ucc3d\uc791\ubb3c\uc5d0 \uc74c\ub780\uc131 \ud639\uc740 \uc720\ud574\ud55c\n \ucf58\ud150\uce20\ub97c \ud3ec\ud568\uc2dc\ud0a4\ub294 \uac83\uc740 \ubb34\ub840\ud569\ub2c8\ub2e4.\n \uadc0\uc5ec\uc6b4 \ucf58\ud150\uce20\ub85c \ub2e4\ub978\uc774\ub97c \ud574\uce58\uc9c0 \ub9c8\uc2ed\uc2dc\uc624.\n\n\uadf8\ub7ec\ub098 \uc774\uc5d0\ub9cc \uad6d\ud55c\ub418\ub294\uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4.\n\ubb34\uc5c7\ubcf4\ub2e4\ub3c4, \uadc0\uc5ec\uc6b4 \ud0c0\uc778\uc744 \uc0c1\ucc98\uc8fc\uc9c0 \ub9c8\uc138\uc694.\n\n2. \ub2f9\uc2e0\uc774 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc0ac\uc6a9\ud574 \ub9ce\uc740 \uc774\ub4dd\uc744 \ubcf8\n\uacbd\uc6b0, \uadc0\uc5ec\uc6b4 \ucc3d\uc791\uc790\uc5d0\uac8c \uc0ac\ub791\uc744 \ubc30\ud478\uc138\uc694.\n\uc778\uac04\uc801\uc778 \uc0ac\ub78c\uc740 \uadc0\uc5ec\uc6b4 \uc0ac\ub78c\ub4e4\uc744 \uc678\uba74\ud558\uc9c0\n\uc54a\uc2b5\ub2c8\ub2e4. \ub2f9\uc2e0\uc758 \ucee4\ud53c \ud55c\uc794\uc744 \ub098\ub220\uc8fc\uc138\uc694.\n\n3. \uc774 \ucc3d\uc791\ubb3c\uc740 \uc5b4\ub5a0\ud55c \ubcf4\uc99d \uc5c6\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.\n\uc774 \ucc3d\uc791\ubb3c\uc744 \uc0ac\uc6a9\ud558\ub2e4, \ucc3d\uc791\uc790\uc758 \uadc0\uc5ec\uc6b4\n\uc2e4\uc218\ub85c \uc778\ud574 \ubb34\uc5b8\uac00 \uc798\ubabb\ub418\uc5c8\ub2e4\uba74, \ubb38\uc81c\ub97c \uc9c1\uc811\n\ud574\uacb0\ud558\uc138\uc694. \ubb34\ub840\ud558\uc9c0 \uc54a\uc740 \uc0ac\ub78c\uc740 \uc801\uc5b4\ub3c4\n\uadc0\uc5ec\uc6b4 \ud0c0\uc778\ub4e4\uc744 \ube44\ub09c\ud558\uac70\ub098 \ubaa8\uc695\ud558\uc9c0\ub294 \uc54a\uc73c\uba70\n\uc218\uc815\ubcf8\uc744 \uc81c\ucd9c\ud558\uac70\ub098 \ubc84\uadf8\ub9ac\ud3ec\ud2b8\ub97c \uc81c\ucd9c \ud560\n\uac83\uc785\ub2c8\ub2e4.\n\n4. \ub2f9\uc2e0\uc774 \uc774 \uadc0\uc5ec\uc6b4 \ucc3d\uc791\ubb3c\uc744 \ud65c\uc6a9\ud574 \ub2e4\ub978 \ucc3d\uc791\ubb3c\n\uc744 \ub9cc\ub4e4\uace0 \uc2f6\uc740 \uacbd\uc6b0 \uc801\uc5b4\ub3c4 \uc0ac\uc6a9\ud588\ub2e4\ub294 \uace0\uc9c0\ub294\n\ub0a8\uaca8\uc8fc\uc138\uc694. \uadc0\uc5ec\uc6b4 \ucc3d\uc791\uc790\ub4e4\uc740 \uc790\uc2e0\uc758 \ucc3d\uc791\ubb3c\uc774\n\uc88b\uc740\uacf3\uc5d0 \uc0ac\uc6a9\ub418\uc5c8\uc74c\uc744 \uae30\ubed0\ud560 \uac83\uc785\ub2c8\ub2e4.\n* \uc774\ub294 \uad8c\uace0 \uc0ac\ud56d\uc785\ub2c8\ub2e4. \ud544\uc218\uac00 \uc544\ub2c8\uba70 \ubd88\uac00\ud53c\ud55c\n \uacbd\uc6b0 \ubb34\uc2dc\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n\n5. \ub7ec\uc2dc\uc544 \uad6d\uc801\uc758 \uc774\ub4e4\uc740 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc601\ub9ac \ubaa9\uc801\uc73c\ub85c\n\uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. - \uc6b0\ub9ac\ub294 \uc804\uc7c1\uc790\uae08\uc744\n\uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uac19\uc740 \uc774\uc720\ub85c\uc368, \uc804\uc7c1\uc774 \uc9c0\uc6d0\ub420 \uc218 \uc788\ub294 \uacf3\uc5d0\uc11c\uc758\n\uc774 \ucc3d\uc791\ubb3c \uc0ac\uc6a9\uc744 \ud5c8\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n qwreeykawaii license v1.3\n\nCopyright 2023. Qwreey [qwreey75@gmail.com]\n\nThis license is based on DBAD license.\nEveryone is permitted to copy and distribute\nverbatim or modified copies of this license\ndocument.\n\nTERMS, AND CONDITIONS FOR COPYING,\nDISTRIBUTION, AND MODIFICATION\n\n1. You can do anything with this original work,\nbut don't be rude\n\nIn general, being rude includes below\n\nFirst. Do not copy these cute works without\n any modification. changing the name\n only is outright copyright infringement\nSecond. Do not add some harmful or NSFW content.\n It's very rude and may harm others\n\nBeing rude is not limited to these instances.\nAbove all, don't hurt cute people\n\n2. If you get any benefit or profit from these cute\nworks, Share the love. A polite person may share\nthe love with cute people.\n3. These cute works are provided with no warranty.\nIf something goes wrong due to the creator's cute\nmistake, Fix it yourself. A polite person may\nsubmit the fix or bug report.\n4. If you create something with these works, Leave\nthe original creator's name in your work.\nthe cute creator will be happy if their works are\nused for good.\n* This is a recommendation. Not required.\n5. Russian nationality can not use this creation for\ncommercial purposes. \u2014 We do not support the war.\nSame reason, This creation cannot be used where\nit can support the war.\n "},{"location":"include/bindable/","title":"Bindable","text":":Fire(...any)
\ub4f1\ub85d\ub41c \uc5f0\uacb0\ub4e4\uc744 \uc2e4\ud589\ud558\uace0, Wait \uc744 \ud480\uc5b4\uc90d\ub2c8\ub2e4.
:Wait()->(...any)
Fire \uac00 \ud638\ucd9c\ub420 \ub54c \uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4. Fire \uc5d0 \uc0ac\uc6a9\ub41c \uac12\uc774 \ubc18\ud658\ub429\ub2c8\ub2e4.
:Connect((...any)->())->Connection
Fire \uac00 \ud638\ucd9c \ub420 \ub54c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4. Fire \uc5d0 \uc0ac\uc6a9\ub41c \uac12\uc774 \ud638\ucd9c \uc778\uc790\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc5f0\uacb0\uc744 \ub04a\uc744 \uc218 \uc788\ub3c4\ub85d Connection \uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
:Once((...any)->())->Connection
Connect \uc640 \uc720\uc0ac\ud558\uc9c0\ub9cc, Fire \uac00 \ud55c\ubc88 \ud638\ucd9c\ub41c \ub4a4 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9d1\ub2c8\ub2e4/
:CheckConnected(func)->boolean
\ud568\uc218\uac00 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.
:DisconnectAll()
\ubaa8\ub4e0 \uc5f0\uacb0\uc744 \ub04a\uc2b5\ub2c8\ub2e4. Wait \uc73c\ub85c \uae30\ub2e4\ub9ac\uace0 \uc788\ub294 \uacf3\uc5d0\ub294 nil \uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.
:Destroy()
:DisconnectAll() \ub97c \uc218\ud589\ud55c \ud6c4, \uac1d\uccb4\ub97c \ub354\uc774\uc0c1 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4. id \uac00 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub294\uacbd\uc6b0 \uc800\uc7a5\uc18c\uc5d0\uc11c \ud30c\uae30\ud558\uac8c \ub429\ub2c8\ub2e4.
"},{"location":"include/connection/","title":"Connection","text":":Disconnect()
\uc5f0\uacb0\uc744 \ub04a\uc2b5\ub2c8\ub2e4. Fire \uac00 \ud638\ucd9c\ub418\ub354\ub77c\ub3c4 Connect \ud639\uc740 Once \uc5d0 \uc0ac\uc6a9\ub41c \ud568\uc218\uac00 \uc2e4\ud589\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
:Destroy()
:Disconnect() \uc758 \ubcc4\uce6d\uc785\ub2c8\ub2e4.
"},{"location":"include/direction/","title":"Direction","text":"Out \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.
In \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.
InOut \uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.
"},{"location":"include/disconnecter/","title":"Disconnecter","text":":Add(connection:Connection|RBXScriptConnection)
connection\uc744 \ub9ac\uc2a4\ud2b8\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4. \ub098\uc911\uc5d0 :Disconnect\ub97c \ud638\ucd9c\ud558\uba74 \ucd94\uac00\ub41c \uc5f0\uacb0\uc774 \ud30c\uae30\ub429\ub2c8\ub2e4.
:Disconnect()
\ucd94\uac00\ub41c \ubaa8\ub4e0 \uc5f0\uacb0\uc5d0 Disconnect() \ub97c \uc218\ud589\ud569\ub2c8\ub2e4. \uc774 \ud638\ucd9c \ud6c4\uc5d0 \ucd94\uac00\ub41c \uc5f0\uacb0\uc740 \ubaa8\ub450 \uc0ac\ub77c\uc9c0\uba70. \uc774 \uc694\uccad \ud6c4\uc5d0\ub3c4 \ub2e4\uc2dc :Add \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 Disconnecter \ub97c \uc644\uc804\ud788 \uc0ac\uc6a9\ud558\uc9c0 \ubabb\ud558\ub3c4\ub85d \ud558\ub824\uba74 :Destroy \ub97c \ud638\ucd9c\ud558\uc138\uc694
:Destroy()
:Disconnect() \ub97c \uc218\ud589\ud55c \ud6c4, \uac1d\uccb4\ub97c \ub354\uc774\uc0c1 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4. id \uac00 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub294\uacbd\uc6b0 \uc800\uc7a5\uc18c\uc5d0\uc11c \ud30c\uae30\ud558\uac8c \ub429\ub2c8\ub2e4.
"},{"location":"include/easings/","title":"Easings","text":" \ubaa8\ub4e0 Easing \uc740 \uc5ec\uae30\uc5d0\uc11c \uc9c1\uc811\uc801\uc73c\ub85c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
Linear
\uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615 \ud568\uc218\uc785\ub2c8\ub2e4 i=x, x=0 to 1
Quint
5 \uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. Quart \ubcf4\ub2e4 \uac00\ud30c\ub978 \uac1c\ud615\uc744 \uac00\uc84c\uc2b5\ub2c8\ub2e4 (^5) i=1-(1-x)^5, x=0 to 1
Quart
\ub124\uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. Cubic \ubcf4\ub2e4 \uac00\ud30c\ub978 \uac1c\ud615\uc744 \uac00\uc84c\uc2b5\ub2c8\ub2e4 (^4) i=1-(1-x)^4, x=0 to 1
Cubic
\uc138\uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. Quad \ubcf4\ub2e4 \uac00\ud30c\ub978 \uac1c\ud615\uc744 \uac00\uc84c\uc2b5\ub2c8\ub2e4 (^3) i=1-(1-x)^3, x=0 to 1
Quad
\uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. (^2) i=1-(1-x)^2, x=0 to 1
Expo
\uc9c0\uc218\ud615 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. \ub9e4\uc6b0 \uac00\ud30c\ub978 \uac1c\ud615\uc744 \uac00\uc84c\uc2b5\ub2c8\ub2e4. i=1-2^(-10*x), x=0 to 1
Sin
\uc0ac\uc778 \ud30c\ud615 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. i=sin(x*pi/2), x=0 to 1
Circle
\uc0ac\ubd84\uc6d0 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. i=sqrt(1-(1-x)^2), x=0 to 1
Back
\uc2dc\uc791\uc2dc \ub4a4\ub85c \uc774\ub3d9\uc774 \uc788\ub294 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
Elastic
\ud0c4\uc131\uc744 \uac00\uc9c0\ub294 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
Bounce
\ud280\uc5b4\uc624\ub984\uc744 \uac00\uc9c0\ub294 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
TODO: \uc560\ub2c8\uba54\uc774\uc158 \ubbf8\ub9ac\ubcf4\uae30 \uc601\uc0c1 \ucd94\uac00
"},{"location":"include/events/","title":"Events","text":"Event(name:string)
\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 \uc774\ubca4\ud2b8\ub4e4\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4, MouseEnter, MouseLeave, MouseButton1Down, MouseButton1Up \ub4f1\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4 \uae30\ubcf8\uc801\uc73c\ub85c \ub85c\ube14\ub85d\uc2a4\uc758 \uae30\ubcf8 \uc774\ubca4\ud2b8\ub4e4\uacfc \ub2e4\ub974\uac8c, \uccab\ubc88\uc9f8 \uc778\uc790\ub85c self \ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
\uc6a9\ubc95\uc608\uc81c - \ubc84\ud2bc\ud074\ub9ad Frame {\n [Event \"MouseEnter\"] = function (self)\n print(self.Name .. \"\uc5d0 \ub9c8\uc6b0\uc2a4\uac00 \uc62c\ub77c\uc654\uc2b5\ub2c8\ub2e4\")\n end;\n}\n local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal TextButton = Class \"TextButton\"\n\nTextButton \"mainButton\" {\n Size = UDim2.fromOffset(200,200);\n [Event \"MouseEnter\"] = function (self)\n print(\"\ubc84\ud2bc\uc774 \ud074\ub9ad\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n end;\n}\nMount(ScreenGUI, Store.GetObject(\"mainButton\"))\n Event.Created
\uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub418\uc5c8\uc744 \ub54c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uc778\uc790\ub85c self \ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nFrame {\n [Event.Created] = function (self)\n print(self.Name .. \"\uc774 \uc0dd\uc131\ub418\uc5c8\uc5b4\uc694\")\n end;\n}\n \uc8fc\uc758 Event.Created \uac00 \uc2e4\ud589\ub420 \ub54c\ub294 Parent \uac12\uc774 \uc815\ud574\uc9c0\uc9c0 \uc54a\uc558\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. self.Parent \ub294 \uc811\uadfc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4. Class.Extend \uc5d0\uc11c\ub294 AfterRender \ub97c \uc774\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.
Event.CreatedAsync
Event.Created \uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc, \ucf54\ub8e8\ud2f4 \uc548\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4. objectList:EachAsync() \ucc98\ub7fc \ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nFrame {\n Frame {\n Name = \"A\";\n [Event.CreatedAsync] = function (self)\n -- \uc774 \ud568\uc218\uac00 \ub05d\ub098\uc9c0 \uc54a\ub354\ub77c\ub3c4 \ub2e4\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \uc218 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4\n task.wait(5)\n end;\n };\n Frame {\n Name = \"B\";\n [Event.Created] = function (self)\n print(self.Name .. \"\uac00 \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n end;\n };\n}\n \uc8fc\uc758 Event.CreatedAsync \uac00 \uc2e4\ud589\ub420 \ub54c\ub294 Parent \uac12\uc774 \uc815\ud574\uc9c0\uc9c0 \uc54a\uc558\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. self.Parent \ub294 \uc811\uadfc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4.
Event.Prop(propertyName:string)
\ud504\ub85c\ud37c\ud2f0 \uac12\uc774 \ubcc0\uacbd\ub428\uc744 \uc5f0\uacb0\ud569\ub2c8\ub2e4.
-- \uc6a9\ubc95\nTextBox {\n Text = \"\uc544\ubb34\uac70\ub098 \uc785\ub825\ud558\uc138\uc694\";\n [Event.Prop \"Text\"] = function (self,text)\n -- \ud3b8\uc758\uc0c1\uc758 \uc774\uc720\ub85c \ubcc0\uacbd\ub41c \uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4\n print(text)\n end;\n}\n "},{"location":"include/extend/","title":"Extend","text":"self(name:string)
Extend \uba54\uc18c\ub4dc \uc804\uc5ed\uc5d0\uc11c \uc0ac\uc6a9\uac00\ub2a5\ud569\ub2c8\ub2e4. \ub9c1\ucee4\ub97c \ub9cc\ub4e4\uba70, PropertyChangedSignal \ub97c \uc774\uc5b4\uc8fc\uac70\ub098, self \uc5d0 \uc6d0\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\ub294 \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc790\uc138\ud55c \uc815\ubcf4\ub294 Render \ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694.
REQUIRED :Render(props:valueStore)
\ud654\uba74\uc5d0 \uadf8\ub824\uc9c0\ub294 UI \ub97c \ub9cc\ub4e4\uc5b4\uc9c0\uac8c \ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4. Extend \uac00 \uadf8\ub824\uc9c0\ub824\uba74 \ubb34\uc870\uac74 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4. \uc774 \uc624\ube0c\uc81d\ud2b8\ub97c \uadf8\ub9ac\ub294\ub370 \ub4e4\uc5b4\uac04 \ud504\ub85c\ud37c\ud2f0 \ubaa9\ub85d\uc744 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c \uc90d\ub2c8\ub2e4. \ub808\uc9c0\uc2a4\ud130 \ubb38\ubc95\uc774 \uc0ac\uc6a9\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
=== \uc608\uc81c
\n ```
OPTION AfterRender Getter Setter Update GetPropertyChangedSignal EmitPropertyChangedSignal Unload self() UpdateTriggers
"},{"location":"include/locales/","title":"Locales","text":"Default (default) English (en_us) Spanish (es_es) French (fr_fr) Indonesian (id_id) Italian (it_it) Japanese (ja_jp) Korean (ko_kr) Russian (ru_ru) Thai (th_th) Turkish (tr_tr) Vietnamese (vi_vn) Portuguese (pt_br) German (de_de) ChineseSimplified (zh_cn) ChineseTraditional (zh_tw) Bulgarian (bg_bg) Bengali (bn_bd) Czech (cs_cz) Danish (da_dk) Greek (el_gr) Estonian (et_ee) Finnish (fi_fi) Hindi (hi_in) Croatian (hr_hr) Hungarian (hu_hu) Georgian (ka_ge) Kazakh (kk_kz) Khmer (km_kh) Lithuanian (lt_lt) Latvian (lv_lv) Malay (ms_my) Burmese (my_mm) Bokmal (nb_no) Dutch (nl_nl) Filipino (fil_ph) Polish (pl_pl) Romanian (ro_ro) Ukrainian (uk_ua) Sinhala (si_lk) Slovak (sk_sk) Slovenian (sl_sl) Albanian (sq_al) Bosnian (bs_ba) Serbian (sr_rs) Swedish (sv_se) Arabic (ar_001)
"},{"location":"include/mounts/","title":"Mounts","text":":Unmount()
\uc774\ub807\uac8c \ud558\uba74 \ub9c8\uc6b4\ud2b8\ub41c Instance \ub97c \uc9c0\uc6cc\ubc84\ub9bd\ub2c8\ub2e4. Quad \ub294 \uc548\uc804\ud55c \uba54\ubaa8\ub9ac \uad00\ub9ac\ub97c \uc704\ud574 gc \uc758 \uae30\ub2a5\uc5d0 \uc758\uc874\ud558\ubbc0\ub85c, gc \uc2dc\uac04\ucc28\ub85c \uc778\ud574 Store.GetObject \uc5d0\uc11c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0ac\ub77c\uc9c0\ub294\ub370 \uc2dc\uac04\uc774 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui,mainFrame)\n\nlocal childFrame = Frame {}\nlocal childFrameMount = Mount(mainFrame,childFrame)\nchildFrameMount:Unmount()\n-- childFrame \uc740 \ub2e8\uc21c\ud788 .Parent = nil \ub418\ub294 \uac83\uc744 \ub118\uc5b4 \uba54\ubaa8\ub9ac\uc5d0\uc11c \uc0ac\ub77c\uc9d1\ub2c8\ub2e4\n-- \uc989, Destroy() \uac00 \ud638\ucd9c\ub429\ub2c8\ub2e4\n :Add(item:any)
Mount \uc5d0 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ucc98\uc74c \uc124\uc815\ud55c to \uac12\uc744 \ub530\ub77c \ubd80\ubaa8\uac00 \uacb0\uc815\ub429\ub2c8\ub2e4.
\uc774 \ub3d9\uc791\uc740 \ub9ac\uc2a4\ud2b8\ub97c \ub9cc\ub4e4 \ub54c \uc720\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc\ub85c\ub4dc \ub3d9\uc791\uc2dc \uc9c1\uc811 \uc81c\uac70\uac00 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui, mainFrame)\n\nlocal lastListMount = Mount(mainFrame)\nlocal function refreshList()\n lastListMount:Unmount() -- \uc774\uc804 children \uc744 \uc54c\uc544\uc11c \uc81c\uac70\ud569\ub2c8\ub2e4\n for i = 1,10 do\n lastListMount:Add(Frame { Name = tostring(i) })\n end\nend\n\ntask.spawn(function()\n while true do\n refreshList()\n task.wait(2)\n end\nend)\n \ub2e4\uc74c\uacfc \uac19\uc774 \uc774\uc804 children \uc744 \uac04\uc811\uc801\uc73c\ub85c \uc81c\uac70\ud558\uace0 \uc0c8\ub85c\uc6b4 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e8 ScrollFrame \uc758 \uacbd\uc6b0 CanvasPosition\uc774 \ucd08\uae30\ud654 \ub418\uc5b4\ubc84\ub9ac\ubbc0\ub85c \uc790\uc2dd\ub4e4\uc744 :Unmount() \ud558\uae30 \uc804\uc5d0 \uc704\uce58\ub97c \uc800\uc7a5\ud558\uace0 \ub2e4\uc2dc \ubd88\ub7ec\uc640\uc57c \ud569\ub2c8\ub2e4
"},{"location":"include/objectList/","title":"objectList","text":":Each((item:any, index:number)->())
\uc77c\ubc18\uc801\uc778 \ubc18\ubcf5\uc785\ub2c8\ub2e4. for \ub97c \uc0ac\uc6a9\ud558\ub294\uac83\uacfc \ud6a8\uacfc\uac00 \uac19\uc73c\ub098 \ud568\uc218\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4
:EachAsync((item:any, index:number)->())
\ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uace0 \ubc14\ub85c\ubc14\ub85c \ub2e4\uc74c \uc544\uc774\ud15c\uc73c\ub85c \ub118\uc5b4\uac11\ub2c8\ub2e4. \ucf54\ub8e8\ud2f4\uc774 \uc774\uc6a9\ub429\ub2c8\ub2e4. wrap() \ucf54\ub8e8\ud2f4\uc744 \ubaa8\ub974\uac70\ub098, \ud544\uc694\uc131\uc774 \uc5c6\ub294\uacbd\uc6b0 \uc77c\ubc18\uc801\uc73c\ub85c :Each \ub97c \uc0ac\uc6a9\ud574\ub3c4 \ub429\ub2c8\ub2e4
:IsEmpty()
\uc774 ObjectList \uac00 \ube44\uc5b4\uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.
:Remove(indexOrItem:number|any)
objectList \uc5d0\uc11c \ud574\ub2f9\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4. , & \ub97c \uc0ac\uc6a9\ud55c \uace0\uae09 \uac80\uc0c9\uc5d0\uc11c\ub294 \uc791\ub3d9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
"},{"location":"include/quadProperty/","title":"quadProperty","text":"RoundSize:number?
ImageLabel, ImageButton \uc5d0\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc18d\uc131\uc785\ub2c8\ub2e4. \uc6d0\ud615 \uc774\ubbf8\uc9c0\uc5d0 Slice\ub97c \uc774\uc6a9\ud574 \ub465\uadfc \ud504\ub808\uc784\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c UICorner\ubcf4\ub2e4 \ubd80\ub4dc\ub7ec\uc6b4 \ucf54\ub108\ud6a8\uacfc\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.
Corner:number?
\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 UI\uc624\ube0c\uc81d\ud2b8\uc5d0 \uc801\uc6a9\ub429\ub2c8\ub2e4. UICorner\ub97c \uc774\uc6a9\ud574 \ubaa8\uc11c\ub9ac \ubd80\ubd84\uc744 \ub465\uae00\uac8c \ub9cc\ub4ed\ub2c8\ub2e4. \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
PaddingAll:UDim?
UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. \uc0c1\ud558\uc88c\uc6b0 \ubaa8\ub450 \uac19\uc740 \uac12\uc73c\ub85c \uc801\uc6a9\ub429\ub2c8\ub2e4. PaddingAllOffset \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
PaddingAllOffset:number?
UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. PaddingAll\uacfc \uac19\uc740 \ubc29\ubc95\uc73c\ub85c \uc791\ub3d9\ud558\ub098, Offset\uac12\ub9cc \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. PaddingAll \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
Scale:number?
UIScale\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. UIScale.Scale \uacfc \uac19\uc740 \ud6a8\uacfc\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4
"},{"location":"include/register/","title":"Register","text":"register \ud2b9\uc218 \uba54\uc18c\ub4dc\uac00 \uc801\uc6a9\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
:Add(value:any)->register
\uac12\uc5d0 \ub354\ud558\uae30\ub97c \ucde8\ud569\ub2c8\ub2e4. \uc74c\uc218\ud615\ud0dc\uac00 \uc81c\uacf5\ub418\ub294 \uacbd\uc6b0 \ube7c\uae30 \ucc98\ub7fc \uc791\ub3d9\ud569\ub2c8\ub2e4. number, Udim, UDim2, Color3, Vector2 \ub4f1 \ub354\ud560 \uc218 \uc788\ub294 \ubaa8\ub4e0\uac83\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.pos = UDim2.fromOffset(100,0)\n\nFrame \"mainFrame\" {\n Position = myStore \"pos\":Add(UDim2.fromOffset(0,100));\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile true do\n myStore.pos = myStore.pos + UDim2.fromOffset(10,0)\n task.wait(2)\nend\n \uc8fc\uc758 \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
:With((store:valueStore, newValue:any, key:string)->())->register
\ud568\uc218 \ub610\ub294 \ud14c\uc774\ube14\uc5d0\uc11c \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4. Add \ubcf4\ub2e4 \ub098\uc911\uc5d0 \uc218\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4
\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \ud568\uc218\uc608\uc81c - \ud14c\uc774\ube14 myStore \"size\":With(function (_,value)\n return value * 2\nend)\n width \uac12\uc5d0 \ub9de\ucdb0 \uc790\ub3d9\uc73c\ub85c UI \uac00 \uc5c5\ub370\uc774\ud2b8\ub418\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.topbarSize = 60\nmyStore.width = 200\n\n-- \ub808\uc9c0\uc2a4\ud130\ub97c \ubcc0\uc218\ub85c \ub450\uace0 \uc0ac\uc6a9\ud569\ub2c8\ub2e4\nlocal listItemSize = myStore \"width\":With(function()\n return UDim2.fromOffset(myStore.width,60)\nend)\n\nFrame \"mainFrame\" {\n Class \"UIListLayout\" { SortOrder = Enum.SortOrder.LayoutOrder };\n\n -- \uc0ac\uc774\uc988\uac00 width \uc5d0 \ub9de\uac8c \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4\n Size = myStore \"width\":With(function ()\n return UDim.fromOffset(store.width,400)\n end);\n\n Frame \"Topbar\" {\n LayoutOrder = 1;\n BackgroundColor3 = Color3.fromRGB(255,0,0);\n -- \uc774\ub807\uac8c \uc5ec\ub7ec \uac12\uc744 \ubb36\uc5b4\uc11c \ub450 \uac12\uc774 \ubcc0\uacbd\ub428, \ud639\uc740 \uadf8\uc774\uc0c1\uc744\n -- \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n Size = myStore \"topbarSize,width\":With(function()\n return UDim2.fromOffset(myStore.width,myStore.topbarSize)\n end);\n }\n Frame \"ListItem\" {\n LayoutOrder = 2;\n BackgroundColor3 = Color3.fromRGB(0,255,0);\n Size = listItemSize;\n };\n Frame \"ListItem\" {\n LayoutOrder = 3;\n BackgroundColor3 = Color3.fromRGB(0,0,255);\n Size = listItemSize;\n };\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- width \uac12\uc744 \ubcc0\uacbd\ud574\ubcf4\uc138\uc694\nwhile true do\n myStore.width = myStore.width + 10\n task.wait(1)\nend\n colors \ud14c\uc774\ube14 \uc548\uc5d0 \uc788\ub294 \uc0c9\uae54\ub4e4\uc744 \ub3cc\uc544\uac00\uba70 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nlocal colors = {\n Color3.fromRGB(255,255,255);\n Color3.fromRGB(255,255,0);\n Color3.fromRGB(0,255,255);\n Color3.fromRGB(255,0,255);\n Color3.fromRGB(255,0,0);\n Color3.fromRGB(0,255,0);\n Color3.fromRGB(0,0,255);\n}\nmyStore.color = 1\n\nFrame \"mainFrame\" {\n Size = UDim2.fromOffset(200,200);\n -- colors \uc5d0\uc11c \uc778\ub371\uc2f1\ud574 \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4\n BackgroundColor3 = myStore \"color\":With(colors);\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- \uc778\ub371\uc2a4\ub97c \uc21c\ud68c\ud569\ub2c8\ub2e4\nwhile task.wait(1) do\n myStore.color = (i-1)%(#colors)+2\nend\n \uc8fc\uc758 \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
:Tween(options:TweenOptions)->register
\ud2b8\uc708\uc744 \uc774\uc6a9\ud574 \ubcc0\uacbd\uc0ac\ud56d\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4(\ucc98\uc74c \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc74c) \uc635\uc158\uc740 Tween \ubb38\uc11c\uc5d0 \ub098\uc640\uc788\ub294 \uc635\uc158\uacfc \uac19\uc2b5\ub2c8\ub2e4.
\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \ud55c\uaebc\ubc88\uc5d0 \uc774\ub3d9 -- Tween \uc635\uc158\uc744 \ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nmyStore \"size\":Tween{ Time = 2 }\n \ud504\ub808\uc784\uc744 \ud55c\uaebc\ubc88\uc5d0 \uc6c0\uc9c1\uc785\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\nmyStore.pos = UDim2.fromOffset(50,0)\nStyle \"TweenFrame\" {\n Size = UDim2.fromOffset(50,50);\n BackgroundColor3 = Color3.fromRGB(255,100,255);\n}\n\nFrame \"mainFrame\" {\n BackgroundColor3 = Color3.fromRGB(255,255,255);\n Size = UDim2.fromOffset(500,500);\n Frame \"TweenFrame\" {\n Position = myStore \"pos\":Tween{Time = 2};\n };\n Frame \"TweenFrame\" {\n Position = myStore \"pos\"\n :Add(UDim2.fromOffset(0,100))\n :Tween{Time = 2};\n };\n Frame \"TweenFrame\" {\n Position = myStore \"pos\"\n :Add(UDim2.fromOffset(0,200))\n :Tween{Time = 2};\n };\n Frame \"TweenFrame\" {\n Position = myStore \"pos\"\n :Add(UDim2.fromOffset(0,300))\n :Tween{Time = 2};\n }\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nlocal on = false\nwhile true do\n on = not on\n myStore.pos = on and UDim2.fromOffset(400,0) or UDim2.fromOffset(50,0)\n task.wait(1.5) -- \ud2b8\uc708\uc740 \ub36e\uc5b4 \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n -- \ub530\ub77c\uc11c 2 \ucd08\uc778 \uae38\uc774\ubcf4\ub2e4 \ub354 \ube68\ub9ac \ubc14\uafd4\ub3c4 \uc624\ub958\uac00 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\nend\n \uc8fc\uc758 \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
:Default(value:any)->register
\uae30\ubcf8\uac12\uc744 \uc815\ud569\ub2c8\ub2e4. \ub9cc\uc57d \uac12\uc774 nil \uc778 \uacbd\uc6b0 \uc774 \uac12\uc744 \uc0ac\uc6a9\ud558\uac8c \ub429\ub2c8\ub2e4. Add \ub098 With \ub4f1 \ub2e4\ub978\uac83\uc5d0 \uc601\ud5a5\ubc1b\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nFrame \"mainFrame\" {\n Size = UDim2.fromOffset(200,200);\n -- color \uac12\uc774 \uc5c6\uc73c\ubbc0\ub85c Default \uc548\uc758 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.\n BackgroundColor3 = myStore \"color\"\n :Default(Color3.fromRGB(255,0,0));\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\ntask.wait(5)\nmyStore.color = Color3.fromRGB(0,255,0)\n \uc8fc\uc758 \ucc98\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \ub54c\uc5d0\ub9cc \uc774 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4. :Register(<INPUT>(store:valueStore, newValue:any, key:string)->())->INPUT
\ub808\uc9c0\uc2a4\ud130\uc5d0 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4. \uac12\uc774 \ubcc0\uacbd\ub418\uba74 \ud568\uc218\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4
newValue \uc5d0\ub294 :Add, :With, :Tween, :Default \uac00 \ub530\ub85c \uacc4\uc0b0\ub418\uc9c0 \uc54a\uc73c\uba70, \uc124\uc815\ub41c \uac12\uc744 \uc544\ubb34 \uac00\uacf5 \uc5c6\uc774 \uc81c\uacf5\ud569\ub2c8\ub2e4
\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \uc5ec\ub7ec \ubcc0\uacbd\uc0ac\ud56d \ucd94\uc801 myStore.test = 1\n-- \ubc18\ud658 \uac12\uc740 \uc785\ub825\uc73c\ub85c \ub123\uc740 \ud568\uc218\uc785\ub2c8\ub2e4. !\uaf2d \uc800\uc7a5\ud574\uc57c\ud569\ub2c8\ub2e4\n-- :Register \ub294 \ud568\uc218\uac00 \uc0ac\ub77c\uc9c0\uc9c0 \uc54a\ub3c4\ub85d \uac12\uc744 \uc720\uc9c0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\n-- \ub9cc\uc57d \ubc84\ub9b4 \uacbd\uc6b0 \uc77c\uc815 \uc2dc\uac04 \ub4a4 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nlocal func = myStore \"test\":Register(function(_,newValue)\n -- \uac12 \ubcc0\uacbd\uc2dc \ucd9c\ub825\ub429\ub2c8\ub2e4\n print(newValue)\nend)\nmyStore.test = 2\n myStore.test1, myStore.test2 \uac00 \ubcc0\ud654\ud558\uba74 print \ud568\uc218\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.
local Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\n\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.test1 = 1\nmyStore.test2 = \"Hello\"\n\nlocal func = myStore \"test1,test2\":Register(function()\n print(myStore.test1,myStore.test2)\nend)\n\nmyStore.test1 = 2\n \uc8fc\uc758 Register \uc548\uc5d0 \ub4e4\uc5b4\uac04 \ud568\uc218\ub294 GC \uc548\uc815\uc131\uc744 \uc704\ud574\uc11c \uc57d\ud55c \ucc38\uc870\ub85c \uc800\uc7a5\ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c \ud568\uc218\ub97c \uc800\uc7a5\ud574\uc57c\ud569\ub2c8\ub2e4.
"},{"location":"include/tweenOptions/","title":"tweenOptions","text":"OPTION Time:number?
\ud2b8\uc708\uc758 \ucd1d \uae38\uc774\ub97c \uc815\ud569\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 1\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
OPTION Easing:string|(index:number)->number?
\ud2b8\uc708\uc758 \uac00\uac10\uc18d \uc815\ub3c4\ub97c \uacb0\uc815\ud569\ub2c8\ub2e4. \ubb38\uc790\uc5f4 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uac70\ub098, Tween.Easings.Linear\uc640 \uac19\uc774 \uc5f4\uac70\ud615 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud639\uc740 \ud544\uc694\uc5d0 \ub530\ub77c \ud568\uc218\ub97c \uc9c0\uc815\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ud568\uc218\ub97c Easing \uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c 1\ucc28 \uc9c4\ud589\ub3c4 (Linear, 0 \uc5d0\uc11c 1 \uc0ac\uc774\uc758 \uac12) \uac12\uc774 \uc8fc\uc5b4\uc9c0\uba70, \uacc4\uc0b0 \uacb0\uacfc\ub85c \uc2e4\uc81c \uc801\uc6a9\ub420 \uc704\uce58\ub97c \ubc18\ud658\ud574\uc57c\ud569\ub2c8\ub2e4. \ubc18\ud658\uac12\uc740 \uc74c\uc218\uc774\uac70\ub098 1 \ubcf4\ub2e4 \ud074 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 Exp2\uac00 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
type Easing =\n\"Linear\" // \uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615\n|\"Quint\" // 5 \uc81c\uacf1\n|\"Quart\" // \ub124\uc81c\uacf1\n|\"Cubic\" // \uc138\uc81c\uacf1\n|\"Quad\" // \uc81c\uacf1\n|\"Sin\" // \uc0ac\uc778 \ud30c\ud615\n|\"Circle\" // \uc0ac\ubd84\uc6d0\n|\"Expo\" // \uc9c0\uc218\ud615\n|\"Elastic\" // \ud0c4\uc131\n|\"Bounce\" // \ud280\uc5b4\uc624\ub984\n|\"Back\" // \ub4a4\ub85c \uac00\uac10\uc18d\n|\"Exp2\" // \ub35c \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 to 2\n|\"Exp4\" // \ub354 \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 ~ 4\n|EasingFunction?;\n \ud568\uc218\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \uc124\uba85\uacfc \ubbf8\ub9ac\ubcf4\uae30\ub294 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694 OPTION Direction:string?
\ud2b8\uc708\uc774 \uc9c4\ud589\ub418\ub294 \ubc29\ud5a5\uc785\ub2c8\ub2e4. \ubb38\uc790\uc5f4 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uac70\ub098, Tween.Directions.Out\uacfc \uac19\uc774 \uc5f4\uac70\ud615 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 Out\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
type Direction =\n// \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.\n\"Out\"\n// \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.\n|\"In\"\n//\uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.\n|\"InOut\"\n \ubc29\ud5a5\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \uc124\uba85\uacfc \ubbf8\ub9ac\ubcf4\uae30\ub294 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694 OPTION CallBack:{[number|\"*\"|string]:(Item:any, Alpha:number, AbsolutePercent:number)->()}?
\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uc2e4\ud589\uc911\uc778 \ub3c4\uc911\uc5d0 \ud568\uc218\ub97c \uc2e4\ud589\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud2b8\uc708\uc758 \uc9c4\ud589 \uc815\ub3c4\uc5d0 \ub530\ub77c\uc11c \ud55c\ubc88 \ud568\uc218\uac00 \uc2e4\ud589\ub418\uac70\ub098 \ud2b8\uc708 \uc9c4\ud589\uc911 \uacc4\uc18d\ud574\uc11c \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc778\ub371\uc2a4\uac00 \uc22b\uc790\uc778 \uacbd\uc6b0 \ud574\ub2f9 \uc9c0\uc810\uc744 \ub118\uc744 \ub54c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc73c\uba70, \"*\" \ub97c \uc778\ub371\uc2a4\ub85c \uc0ac\uc6a9\ud558\uba74 \ubaa8\ub4e0 \ubd80\ubd84\uc5d0\uc11c \ud568\uc218\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4. \ud568\uc218\uc5d0\ub294 \ud3b8\uc758\uc0c1 \ud2b8\uc708\uc744 \ud558\uace0\uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \uc704\uce58\uac12, \uc2dc\uac04\ub9cc\uc744 \uace0\ub824\ud55c 1\ucc28 \uc704\uce58\uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
OPTION OnStepped:(Item:any, Alpha:number, AbsolutePercent:number)->()?
CallBack \uc5d0 \"*\" \ub97c \ub123\uc740\uac83\uacfc \ub3d9\uc77c\ud55c \ud6a8\uacfc\ub97c \uac00\uc9c0\ub294 \ubcc4\uce6d\uc785\ub2c8\ub2e4
OPTION Ended:(Item:any, Alpha:number, AbsolutePercent:number)->()?
CallBack \uc5d0 1\uc744 \ub123\uc740\uac83\uacfc \ub3d9\uc77c\ud55c \ud6a8\uacfc\ub97c \uac00\uc9c0\ub294 \ubcc4\uce6d\uc785\ub2c8\ub2e4
OPTION Getter:(Item:any, Property:string)->any?
\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uac12\uc744 \uc5bb\uc73c\ub824 \ud560 \ub54c \uc0ac\uc6a9\ud560 \ud568\uc218\uc785\ub2c8\ub2e4. \ud568\uc218\uc5d0 \ud2b8\uc708\ud558\uace0 \uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \ud504\ub85c\ud37c\ud2f0 \uc774\ub984\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
Warning register:Tween() \uc640 \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
OPTION Getter:(Item:any, Property:string, Value:Lerpable)->any?
\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uac12\uc744 \uc124\uc815\ud558\ub824 \ud560 \ub54c \uc0ac\uc6a9\ud560 \ud568\uc218\uc785\ub2c8\ub2e4. \ud568\uc218\uc5d0 \ud2b8\uc708\ud558\uace0 \uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \ud504\ub85c\ud37c\ud2f0 \uc774\ub984, \uc124\uc815\ud560 \uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
Warning register:Tween() \uc640 \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
"},{"location":"include/typeDirection/","title":"typeDirection","text":"type Direction =\n// \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.\n\"Out\"\n// \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.\n|\"In\"\n//\uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.\n|\"InOut\"\n "},{"location":"include/typeEasings/","title":"typeEasings","text":"type Easing =\n\"Linear\" // \uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615\n|\"Quint\" // 5 \uc81c\uacf1\n|\"Quart\" // \ub124\uc81c\uacf1\n|\"Cubic\" // \uc138\uc81c\uacf1\n|\"Quad\" // \uc81c\uacf1\n|\"Sin\" // \uc0ac\uc778 \ud30c\ud615\n|\"Circle\" // \uc0ac\ubd84\uc6d0\n|\"Expo\" // \uc9c0\uc218\ud615\n|\"Elastic\" // \ud0c4\uc131\n|\"Bounce\" // \ud280\uc5b4\uc624\ub984\n|\"Back\" // \ub4a4\ub85c \uac00\uac10\uc18d\n|\"Exp2\" // \ub35c \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 to 2\n|\"Exp4\" // \ub354 \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 ~ 4\n|EasingFunction?;\n "},{"location":"tutorial/","title":"Getting Started","text":"\uc2e4\ud5d8\uc801\uc778 \ubaa8\ub4c8 \uc774 \ubaa8\ub4c8\uc740
"},{"location":"tutorial/#_1","title":"\uba38\ub9ac\ub9d0","text":"\uc774 \ud398\uc774\uc9c0\ub294 Quad \ubaa8\ub4c8\uc744 \uc27d\uac8c \uc2dc\uc791\ud560 \uc218 \uc788\ub3c4\ub85d \ud29c\ud1a0\ub9ac\uc5bc\uc744 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud398\uc774\uc9c0\ub97c \uc815\ub3c5\ud574 Quad \ubaa8\ub4c8\uc758 \uc804\ubc18\uc801\uc778 \uc0ac\uc6a9\ubc95\uc744 \ud30c\uc545\ud574\ubcf4\uc138\uc694!
\uc8fc\uc758: \uc774 \ubaa8\ub4c8\uc740 \uac1c\ubc1c \uc9c4\ud589\uc774 \ub9e4\uc6b0 \ube60\ub985\ub2c8\ub2e4. \ub9ce\uc740\uc591\uc758 \ubcc0\uacbd \uc0ac\ud56d\uc774 \uc788\uc744 \uc218 \uc788\uc73c\ubbc0\ub85c github \uc5d0\uc11c \ubcc0\uacbd\uc0ac\ud56d\uc744 \uacc4\uc18d\ud574\uc11c \ucd94\uc801\ud558\uc138\uc694
\ubcc0\uacbd \uc0ac\ud56d\uc740 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/#_2","title":"\uc124\uce58","text":""},{"location":"tutorial/#_3","title":"\ubaa8\ub4c8 \ubd88\ub7ec\uc624\uae30/\ucd08\uae30\ud654","text":"local Quad = require(path.to.module).Init()\n \ubaa8\ub4c8\uc744 \uc14b\uc5c5\ud558\uae30 \uc704\ud574\uc11c\ub294 .Init(QuadId:string?) \uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c QuadId \uac12\uc740 \ud544\uc694\ud558\uc9c0 \uc54a\uc9c0\ub9cc, \ub098\uc911\uc5d0 \uc18c\uac1c\ud560 Store \uc640 \uac19\uc740 \uc77c\ubd80 \uae30\ub2a5\ub4e4\uc774 QuadId:string \uc5d0 \uc601\ud5a5\ubc1b\uae30\ub3c4 \ud569\ub2c8\ub2e4.
.Init(QuadId:string) \ud568\uc218\ub294 QuadId \uac00 \uac19\uc740 \ubd88\ub7ec\uc624\uae30\uac00 \uc774\ubbf8 \uc788\uc5c8\ub358 \uacbd\uc6b0, \ucd08\uae30\ud654 \ud558\uc9c0 \uc54a\uace0 \ubd88\ub7ec\uc654\ub358\uac83\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \ubaa8\ub4c8\ub4e4 \ub07c\ub9ac QuadId \uac00 \uac19\uc740 \uacbd\uc6b0 Store \uc640 \uac19\uc740\uac83\uc774 \uacf5\uc720\ub429\ub2c8\ub2e4.
QuadId \uac00 \ube44\uc6cc\uc9c4 \uacbd\uc6b0 \ud55c\ubc88\ub3c4 \uc0dd\uc131\ub41c \uc801 \uc5c6\ub294 \uc0c8\ub85c\uc6b4 Quad \uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4
local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n \ubd88\ub7ec\uc624\uae30\uac00 \ub05d\ub0ac\ub2e4\uba74 \uc774\uc81c Quad \uc758 \uc790\uc6d0\ub4e4\uc744 \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4! \ub2e4\uc74c \ud398\uc774\uc9c0\ub85c \ub118\uc5b4\uac00 \uc5b4\uc11c \ud65c\uc6a9\ud574 \ubd05\uc2dc\ub2e4
"},{"location":"tutorial/#_4","title":"\ud0c0\uc785 \ubd88\ub7ec\uc624\uae30","text":"\uae30\ubcf8\uc801\uc73c\ub85c \uc774 \ubaa8\ub4c8\uc740 \ub85c\ub4dc\uc2dc \ud0c0\uc785\uc744 \ubc18\ud658\ud558\uc9c0\ub9cc. \uc9c1\uc811\uc801\uc73c\ub85c \ud0c0\uc785\uc744 \uc9c0\uc815\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 types.lua \ub97c \ubd88\ub7ec\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4
local types\n "},{"location":"tutorial/#_5","title":"\ud14c\uc2a4\ud2b8 \ud658\uacbd \uc900\ube44","text":"\ud14c\uc2a4\ud2b8 \ud658\uacbd\uc740 rojo \uc640\uc758 \uac1c\ubc1c\ud1b5\ud569\uc744 \uc704\ud574 Play \ubc84\ud2bc\uc744 \ub204\ub974\uc9c0 \uc54a\uace0 \ubbf8\ub9ac\ubcf4\uae30\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4e4\uc5b4\uc90d\ub2c8\ub2e4 \uc774\ub97c \ud1b5\ud574 \ub2e4\ub978 \ucf54\ub4dc \ubc29\uc2dd\uc758 UI \ud504\ub808\uc784 \uc6cc\ud06c\ubcf4\ub2e4 \ube60\ub978 \uac1c\ubc1c\uc18d\ub3c4\ub97c \ub2ec\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/#_6","title":"\uc790\ub3d9 \ub9ac\ub85c\ub4dc","text":"\uc8fc\uc758: rojo \ud658\uacbd\uc774 \uc544\ub2c8\ub77c\uba74 \uc790\ub3d9 \ub9ac\ub85c\ub4dc\ub294 \ub799\uc744 \ub3d9\ubc18\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
\uc77c\ubc18\uc801\uc73c\ub85c, \ub85c\uceec \ud3b8\uc9d1 \ud658\uacbd\uc5d0\uc11c \ub85c\ube14\ub85d\uc2a4\uc758 script editor \ub294 \ud55c\uae00\uc790 \ud55c\uae00\uc790 \ubcc0\uacbd\uc2dc \ub9c8\ub2e4 .Source \ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4. \uc774\ub294 \uacf3 \ud55c\uae00\uc790 \ud55c\uae00\uc790 \ud0c0\uc774\ud551 \uc2dc \ub9c8\ub2e4 UI \uac00 \uc5c5\ub370\uc774\ud2b8 \ub420 \uc218 \uc788\uc74c\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. Quad \uc758 tracker \ubaa8\ub4c8\uc740 \uc21c\uac04\uc801\uc73c\ub85c \ub9ce\uc740\uc591\uc758 \ub9ac\ub85c\ub4dc\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\ub3c4\ub85d \uc801\uc808\ud55c \ucfe8\ud0c0\uc784\uacfc \uc2dc\uac04\ubd84\ubc30\ub97c \uac00\uc9c0\uace0 \uc788\uc9c0\ub9cc, \uc774 \uacbd\uc6b0\uc5d0\ub3c4 Ctrl+S \ub97c \ub20c\ub7ec \uc800\uc7a5\ud574\uc57c \uc801\uc6a9\ub418\ub294 vscode \uc640 \uac19\uc740 \ud0c0 \ud3b8\uc9d1\uae30\uc640\ub294 \ucc28\uc774\uac00 \ub0a0 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc\uac00 \ucee4\uc9d0\uc73c\ub85c \uc778\ud574 \uc790\ub3d9 \ub9ac\ub85c\ub4dc\uc5d0\uc11c \ud37c\ud3ec\uba3c\uc2a4\uc801 \uc774\uc288\ub97c \uacaa\ub294\ub2e4\uba74, rojo \ub97c \ud65c\uc6a9\ud574 \ucf54\ub4dc\ub97c \uc678\ubd80\ub85c \uc62e\uae34 \ud6c4, vscode \ub97c \uc2a4\ud29c\ub514\uc624 \uc704\uc5d0 \ub193\uace0 \ubbf8\ub9ac\ubcf4\uae30\uc640 \ucf54\ub4dc\ub97c \ub3d9\uc2dc\uc5d0 \ubcf4\uba74\uc11c \ud3b8\uc9d1\ud558\uc138\uc694.
"},{"location":"tutorial/#_7","title":"\uc218\ub3d9 \ub9ac\ub85c\ub4dc","text":""},{"location":"tutorial/10_signal/","title":"Signal - \uc774\ubca4\ud2b8 \uc0dd\uc131\uacfc \uc5f0\uacb0","text":"\uc77d\uae30 \uc804... \ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Bindable, Disconnecter \uae30\ub2a5\uc774 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Bindable, Disconnecter \ub294 \uacf5\uc720\ub429\ub2c8\ub2e4
Quad \uc5d0\ub294 \ud3b8\uc758\uc0c1\uc758 \uc774\uc720\ub85c \ub85c\ube14\ub85d\uc2a4\uc758 RBXScriptSignal \uc758 \uc720\uc0ac\ud488\uacfc, \ud55c\ubc88\uc5d0 \uc2dc\uadf8\ub110\uc744 \ub04a\uc5b4\uc8fc\ub294 Disconnecter \ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774\ub294 \ub0b4\ubd80\uc801\uc73c\ub85c Extend \uc758 GetPropertyChangedSignal \uac19\uc740 \uacf3\uc5d0\uc11c \uc0ac\uc6a9\ub418\uae30\ub3c4 \ud569\ub2c8\ub2e4.
"},{"location":"tutorial/10_signal/#bindable","title":"Bindable","text":"Bindable \uc740 RBXScriptSignal \uacfc \uc720\uc0ac\ud55c \uac1d\uccb4\uc785\ub2c8\ub2e4. Signal.Bindable.New(id:string?) \uc73c\ub85c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub85c\ube14\ub85d\uc2a4\uc758 \uae30\ubcf8 BindableEvent \uc640\ub294 \ub2e4\ub974\uac8c :Fire \uac00 \ud55c\uacf3\uc5d0 \ud569\uccd0\uc838 \uc788\uc2b5\ub2c8\ub2e4.
Note \ub9cc\uc57d id \ub97c \uc9c0\uc815\ud55c \uacbd\uc6b0, \uac19\uc740 id \ub97c \uac00\uc9c4 Bindable \uc774 \uc788\uc73c\uba74 \uc774\uc804\uac83\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.
local Quad = require(path.to.module).Init()\nlocal Signal = Quad.Signal\n\nlocal mySignal = Signal.Bindable.New()\n\nlocal connection = mySignal:Connect(function(v)\n print(v)\nend)\nmySignal:Fire(\"\uc774 \uba54\uc2dc\uc9c0\ub294 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.\")\nconnection:Disconnect()\nmySignal:Fire(\"\uc774 \uba54\uc2dc\uc9c0\ub294 \ucd9c\ub825\ub418\uba74 \uc548\ub429\ub2c8\ub2e4.\")\n\ntask.spawn(function()\n task.wait(5)\n mySignal:Fire(\"\uc774 \uba54\uc2dc\uc9c0\ub294 \uc9c0\uc5f0\ub41c \ud6c4 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.\")\nend)\nprint(mySignal:Wait())\n\nmySignal:Once(function(v)\n print(v)\nend)\nmySignal:Fire(\"\uc774 \uba54\uc2dc\uc9c0\ub294 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.\")\nmySignal:Fire(\"\uc774 \uba54\uc2dc\uc9c0\ub294 \ucd9c\ub825\ub418\uba74 \uc548\ub429\ub2c8\ub2e4.\")\n\nmySignal:Once(function(v)\n print(v)\nend):Disconnect()\nmySignal:Fire(\"\uc774 \uba54\uc2dc\uc9c0\ub294 \ucd9c\ub825\ub418\uba74 \uc548\ub429\ub2c8\ub2e4.\")\n "},{"location":"tutorial/10_signal/#bindable_1","title":"Bindable \uba54\uc18c\ub4dc","text":"Bindable \uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc18c\ub4dc\ub4e4\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
:Fire(...any)
\ub4f1\ub85d\ub41c \uc5f0\uacb0\ub4e4\uc744 \uc2e4\ud589\ud558\uace0, Wait \uc744 \ud480\uc5b4\uc90d\ub2c8\ub2e4.
:Wait()->(...any)
Fire \uac00 \ud638\ucd9c\ub420 \ub54c \uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4. Fire \uc5d0 \uc0ac\uc6a9\ub41c \uac12\uc774 \ubc18\ud658\ub429\ub2c8\ub2e4.
:Connect((...any)->())->Connection
Fire \uac00 \ud638\ucd9c \ub420 \ub54c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4. Fire \uc5d0 \uc0ac\uc6a9\ub41c \uac12\uc774 \ud638\ucd9c \uc778\uc790\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc5f0\uacb0\uc744 \ub04a\uc744 \uc218 \uc788\ub3c4\ub85d Connection \uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
:Once((...any)->())->Connection
Connect \uc640 \uc720\uc0ac\ud558\uc9c0\ub9cc, Fire \uac00 \ud55c\ubc88 \ud638\ucd9c\ub41c \ub4a4 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9d1\ub2c8\ub2e4/
:CheckConnected(func)->boolean
\ud568\uc218\uac00 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.
:DisconnectAll()
\ubaa8\ub4e0 \uc5f0\uacb0\uc744 \ub04a\uc2b5\ub2c8\ub2e4. Wait \uc73c\ub85c \uae30\ub2e4\ub9ac\uace0 \uc788\ub294 \uacf3\uc5d0\ub294 nil \uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.
:Destroy()
:DisconnectAll() \ub97c \uc218\ud589\ud55c \ud6c4, \uac1d\uccb4\ub97c \ub354\uc774\uc0c1 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4. id \uac00 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub294\uacbd\uc6b0 \uc800\uc7a5\uc18c\uc5d0\uc11c \ud30c\uae30\ud558\uac8c \ub429\ub2c8\ub2e4.
"},{"location":"tutorial/10_signal/#connection","title":"Connection \uba54\uc18c\ub4dc","text":"Bindable:Connect \uc640 Bindable:Once \ub294 Connection \uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. Connection \uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc18c\ub4dc\ub4e4\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
:Disconnect()
\uc5f0\uacb0\uc744 \ub04a\uc2b5\ub2c8\ub2e4. Fire \uac00 \ud638\ucd9c\ub418\ub354\ub77c\ub3c4 Connect \ud639\uc740 Once \uc5d0 \uc0ac\uc6a9\ub41c \ud568\uc218\uac00 \uc2e4\ud589\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
:Destroy()
:Disconnect() \uc758 \ubcc4\uce6d\uc785\ub2c8\ub2e4.
"},{"location":"tutorial/10_signal/#disconnecter","title":"Disconnecter","text":"Disconnecter \ub294 \uc77c\uc885\uc758 Maid \ubaa8\ub4c8\uacfc \ube44\uc2b7\ud55c \uac1d\uccb4\uc785\ub2c8\ub2e4. \uc774 \uac1d\uccb4\uc5d0\ub294 Connection (\ub85c\ube14\ub85d\uc2a4, Quad \ubaa8\ub450 \ud638\ud658) \uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc73c\uba70, \ub098\uc911\uc5d0 \ucd94\uac00\ub41c Connection \uc744 \ud55c\uaebc\ubc88\uc5d0 Disconnect \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Signal.Disconnecter.New(id:string?) \uc73c\ub85c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
Note \ub9cc\uc57d id \ub97c \uc9c0\uc815\ud55c \uacbd\uc6b0, \uac19\uc740 id \ub97c \uac00\uc9c4 Bindable \uc774 \uc788\uc73c\uba74 \uc774\uc804\uac83\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.
:Add(connection:Connection|RBXScriptConnection)
connection\uc744 \ub9ac\uc2a4\ud2b8\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4. \ub098\uc911\uc5d0 :Disconnect\ub97c \ud638\ucd9c\ud558\uba74 \ucd94\uac00\ub41c \uc5f0\uacb0\uc774 \ud30c\uae30\ub429\ub2c8\ub2e4.
:Disconnect()
\ucd94\uac00\ub41c \ubaa8\ub4e0 \uc5f0\uacb0\uc5d0 Disconnect() \ub97c \uc218\ud589\ud569\ub2c8\ub2e4. \uc774 \ud638\ucd9c \ud6c4\uc5d0 \ucd94\uac00\ub41c \uc5f0\uacb0\uc740 \ubaa8\ub450 \uc0ac\ub77c\uc9c0\uba70. \uc774 \uc694\uccad \ud6c4\uc5d0\ub3c4 \ub2e4\uc2dc :Add \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 Disconnecter \ub97c \uc644\uc804\ud788 \uc0ac\uc6a9\ud558\uc9c0 \ubabb\ud558\ub3c4\ub85d \ud558\ub824\uba74 :Destroy \ub97c \ud638\ucd9c\ud558\uc138\uc694
:Destroy()
:Disconnect() \ub97c \uc218\ud589\ud55c \ud6c4, \uac1d\uccb4\ub97c \ub354\uc774\uc0c1 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4. id \uac00 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub294\uacbd\uc6b0 \uc800\uc7a5\uc18c\uc5d0\uc11c \ud30c\uae30\ud558\uac8c \ub429\ub2c8\ub2e4.
"},{"location":"tutorial/11_extend/","title":"Extend - \ud655\uc7a5\uacfc \uc7ac\uc0ac\uc6a9","text":""},{"location":"tutorial/11_extend/#_1","title":"\ub098\ub9cc\uc758 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uc790","text":"Quad \uc5d0\uc11c\ub294 \ub85c\ube14\ub85d\uc2a4\uc758 Frame \uc774\ub098 TextButton \uac19\uc740 \uae30\ubcf8 \uc624\ube0c\uc81d\ud2b8\ub9cc \ub9cc\ub4e4 \uc218 \uc788\ub294\uac83\uc774 \uc544\ub2d9\ub2c8\ub2e4. Quad \ub294 \uc790\uc2e0\ub9cc\uc758 \ubc84\ud2bc, \ud639\uc740 \uc5ec\ub7ec \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \ucd94\uc0c1\uc801\uc73c\ub85c \ub9cc\ub4e4\uace0. \ub2e4\uc2dc \ud65c\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d Extend \ub97c \uc9c0\uc6d0\ud569\ub2c8\ub2e4.
Extend \ub294 Register \uc640 \ub354\ubd88\uc5b4 Quad \uc758 \uac00\uc7a5 \uc911\uc694\ud55c \uae30\ub2a5\uc73c\ub85c\uc368, \ub2e4\uc74c\uacfc \uac19\uc740 \uc7a5\uc810\uc744 \uc9c0\ub2d9\ub2c8\ub2e4.
\uc7ac\uc0ac\uc6a9 \uac00\ub2a5\ud569\ub2c8\ub2e4. \ub098\ub9cc\uc758 \ubc84\ud2bc\uc744 \ub9cc\ub4e4\uace0, \uace0\uce58\uace0 \uc2f6\uc740 \ub9c8\uc74c\uc774 \uc0dd\uaca8 \uace0\uce58\uba74 \uc790\ub3d9\uc73c\ub85c \uc0ac\uc6a9\ub41c \uacf3\ub4e4\uc774 \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4. \uae34 \ucf54\ub4dc\ub97c \ub098\ub204\uc5b4 \ucf54\ub4dc\ub9c8\ub2e4 \ud655\uc2e4\ud55c \ubaa9\uc801\uc744 \ubd80\uc5ec\ud574 \ub354 \uba85\ud655\ud55c \ucf54\ub4dc \uc791\uc131\uc774 \uac00\ub2a5\ud574\uc9d1\ub2c8\ub2e4. \uc790\uc2e0\ub9cc\uc758 \ud504\ub85c\ud37c\ud2f0\ub97c \ub9cc\ub4e4\uac70\ub098 \uc644\uc804\ud788 \uc6d0\ud558\ub294\ub300\ub85c \uc624\ube0c\uc81d\ud2b8\ub97c \ucee4\uc2a4\ud130\ub9c8\uc774\uc9d5 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud568\uc218\ub098 \uc0dd\uc131\uae30\ub97c \uc9c1\uc811 \ub9cc\ub4dc\ub294 \uac83 \ubcf4\ub2e4 \uc77c\uad00\ub41c \ubc29\ubc95\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. Extend \uac1d\uccb4\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc0dd\uc131\ud569\ub2c8\ub2e4.
local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\n-- extend \uac1d\uccb4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4\nlocal myClass = Class.Extend()\n \uc77c\ubc18\uc801\uc73c\ub85c Extend \ub294 \ud55c \ubaa8\ub4c8\uc5d0 \ud558\ub098\uc529 \ub123\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc740 \ucf54\ub4dc \uad6c\uc870\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uc138\uc694.
- ScreenGUI\n |-- localscript\n |-- myClass (ModuleScript)\n localscriptlocalscript.myClass local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Mount = Quad.Mount\nlocal Class = Quad.Class\nlocal Store = Quad.Store\n\nlocal myStore = Store.GetStore(\"myStore\")\nmyStore.bgColor = Color3.fromRGB(0,0,0)\n\n-- Class(require(script.myClass)) \uc640 \uac19\uc2b5\ub2c8\ub2e4.\n-- \uc904\uc5ec\uc11c Class(script.myClass) \ub85c \uc4f8 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\nlocal myClass = Class(script.myClass)\n\n-- \ud504\ub808\uc784\uc5d0 \ub123\uac70\ub098 \ud558\uc5ec\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4\n-- \uc77c\ubc18 \uc624\ube0c\uc81d\ud2b8\uc640 \ub611\uac19\uc774 id \ub97c \ub123\uace0 GetObject \ub85c\n-- \uac00\uc838\uc62c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4\nlocal main = myClass \"main\" {\n Testing = 1;\n Text = \"Test\";\n -- \ub808\uc9c0\uc2a4\ud130 \uac12\uc744 \ub118\uaca8\uc904 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\n -- \ubc1b\ub294\ucabd\ub3c4 \ub808\uc9c0\uc2a4\ud130\uc778 \uacbd\uc6b0 \uac12\uc774 \uc5f0\ub3d9\ub429\ub2c8\ub2e4.\n BackgroundColor3 = myStore \"bgColor\";\n}\n\nMount(ScreenGUI,main)\nprint(Store.GetObject(\"main\") == main) -- true\n\n-- \uc774 \uac12\uc744 \ubc14\uafb8\uba74 \uc5f0\ub3d9\ub41c BackgroundColor3 \ub3c4 \ubc14\ub014\uac83\uc785\ub2c8\ub2e4\nmyStore.bgColor = Color3.fromRGB(255,255,255)\n\n-- \uac12 \ubcc0\uacbd\ub428\uc744 \uc5f0\uacb0\ud558\uae30\nmain\n :GetPropertyChangedSignal(\"AbsolutePosition\")\n :Connect(function()\n print(\"AbsolutePosition\",main.AbsolutePosition)\n end)\n\n-- main:Update()\n-- \uac15\uc81c\ub85c \ub2e4\uc2dc Render \ub97c \uc2e4\ud589\ud558\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4.\n local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Event = Quad.Event\n\nlocal TextLabel = Class \"TextLabel\"\n\nlocal myClass = Class.Extend()\n\n-- Init \uc5d0\ub294 \ud504\ub85c\ud37c\ud2f0 \ub9ac\uc2a4\ud2b8\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4.\n-- Init \ub294 \uc5c6\ub354\ub77c\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.\nfunction myClass:Init(props)\n -- \uc0dd\uc131\ub41c \uc624\ube0c\uc81d\ud2b8\uc5d0 \ud504\ub77c\uc774\ube57 \uac12\uc744 \ub9cc\ub4ed\ub2c8\ub2e4.\n -- \uc774\ub984 \uc55e\uc5d0 _ \uac00 \ubd87\uc73c\uba74 \uc678\ubd80\uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294 \ubaa9\uc801\uc774 \uc544\ub2cc\n -- \ub0b4\ubd80\uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294 \ubaa9\uc801\uc73c\ub85c\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n -- \uc774 \uacbd\uc6b0 \uc548\uc804\uc131\uc744 \uc704\ud574 register \ub97c \uc0ac\uc6a9\ud560 \uc218\n -- \uc5c6\uc2b5\ub2c8\ub2e4.\n self._testValue = 2\n\n -- \ud504\ub85c\ud37c\ud2f0\uc758 \uae30\ubcf8\uac12\uc744 \uc815\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n -- \uc0dd\uc131 \uc2dc \uac12\uc774 \ub204\ub77d\ub41c \uacbd\uc6b0 \uc0ac\uc6a9\ud560 \uac12\uc744 \uc815\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n -- \ud0a4, \uac12 \uc73c\ub85c \uad6c\uc131\ud569\ub2c8\ub2e4\n props:Default(\"Text\",\"Testing Label\")\nend\n\n-- myClass \uac00 \uc9c4\uc9dc \uadf8\ub824\uc9c0\ub294 \ubd80\ubd84\uc785\ub2c8\ub2e4.\n-- Render \ub3c4 Init \ucc98\ub7fc \ud504\ub85c\ud37c\ud2f0 \ub9ac\uc2a4\ud2b8\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4.\nfunction myClass:Init(props)\n return TextLabel {\n -- self \uc5d0 _label \ub85c \uc774 TextLabel \uc744 \ub123\uc2b5\ub2c8\ub2e4.\n -- \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uc5d0\ub3c4 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ubb38\ubc95\uc785\ub2c8\ub2e4.\n self \"_label\";\n\n -- GetPropertyChangedSignal \uac00 \uc791\ub3d9\ud560 \uc218 \uc788\ub3c4\ub85d\n -- \ud504\ub85c\ud37c\ud2f0 \ubcc0\uacbd \uc774\ubca4\ud2b8\ub97c \uc5f0\uacb0\ud574\uc90d\ub2c8\ub2e4\n -- \uc774 \ub610\ud55c \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uc5d0\ub3c4 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ubb38\ubc95\uc785\ub2c8\ub2e4.\n [Event.Prop \"AbsolutePosition\"] = self \"AbsolutePosition\";\n -- \ub9c8\uc6b0\uc2a4 \ud074\ub9ad\uac19\uc740 \ub2e4\ub978 \uc774\ubca4\ud2b8\ub97c GetPropertyChangedSignal \uc5d0\n -- \uc5f0\uacb0\ud558\ub824\uba74 :EmitPropertyChangedSignal() \ub97c \ud638\ucd9c\ud574\uc8fc\uba74 \ub429\ub2c8\ub2e4.\n [Event \"MouseEnter\"] = function (this,x,y)\n -- \ud0a4, \uac12\uc774 \ub4e4\uc5b4\uac11\ub2c8\ub2e4. \uac12\uc774 \uc5c6\uc73c\uba74 self[key] \ub85c \ub300\uc2e0\ud569\ub2c8\ub2e4.\n self:EmitPropertyChangedSignal(\"Testing2\",1)\n end;\n\n -- \ubc1b\uc740 \ub808\uc9c0\uc2a4\ud130\ub97c \uc5f0\ub3d9\ud569\ub2c8\ub2e4.\n -- \ub9cc\uc57d props.BackgroundColor3 \ub9cc \uc0ac\uc6a9\ud558\uba74\n -- \ucc98\uc74c\uc5d0\ub9cc \ub808\uc9c0\uc2a4\ud130\uc5d0\uc11c \uac12\uc744 \uc77d\uc5b4\uc635\ub2c8\ub2e4.\n -- \ub530\ub77c\uc11c \uac12\uc744 \ubcc0\uacbd\ud574\ub3c4 \ubcc0\uacbd\uc0ac\ud56d\uc774 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n BackgroundColor3 = props \"BackgroundColor3\";\n\n -- \uc785\ub825 \uac12\uacfc \uc0c1\uad00\uc5c6\uc774 \ub808\uc9c0\uc2a4\ud130\ub97c \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n -- \uc774 \uacbd\uc6b0 main.Text = \"New\" \ucc98\ub7fc \uc9c1\uc811 \ubcc0\uacbd\ud558\uba74\n -- \uadf8 \ubcc0\uacbd\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4.\n Text = props \"Text\";\n\n -- ... \uc790\uc2dd\uc744 \ub123\uc5b4\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.\n }\nend\n\n-- function myClass:Unload(object)\n-- :Destroy \uac00 \ud638\ucd9c\ub420 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ub530\ub85c \uc120\uc5b8\ud558\uc9c0 \uc54a\uc544\ub3c4\n-- \uc5f0\uacb0\uc744 \ubaa8\ub450 \ub04a\uace0 \uc5c6\uc5d0\uc8fc\uc9c0\ub9cc \ud544\uc694\ud55c \uacbd\uc6b0 \uc9c1\uc811 \uc5c6\uc5d0\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n-- object \ub294 :Render \uac00 \ubc18\ud658\ud55c \uac12\uc785\ub2c8\ub2e4\n\n-- AbsolutePosition \uac12\uc744 \ubc18\ud658\ud560 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4\nfunction myClass.Getter.AbsolutePosition(self)\n return self._label.AbsolutePosition\nend\n\n-- AbsolutePosition \uac12\uc744 \uc124\uc815\ud560 \uc218 \uc5c6\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4\nfunction myClass.Setter.AbsolutePosition(self,newValue)\n -- \ud544\uc694\ud55c \uacbd\uc6b0 \uac12\uc744 \uc124\uc815\ud558\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n error(\"AbsolutePosition \uac12\uc740 \uc124\uc815\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4\")\nend\n\n-- main.Testing = 2 \ub2e4\uc74c\uacfc \uac19\uc774 \uac12\uc744 \ubcc0\uacbd\ud558\uba74 \uc624\ube0c\uc81d\ud2b8\uac00\n-- \uc644\uc804\ud788 \ub2e4\uc2dc \uadf8\ub824\uc9d1\ub2c8\ub2e4. \uc989 \uc5c5\ub370\uc774\ud2b8 \ud2b8\ub9ac\uac70\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.\nmyClass.UpdateTriggers.Testing = true\n\n-- \ub9cc\ub4e0 \ud074\ub798\uc2a4\ub97c \ubc18\ud658\ud574\uc90d\uc2dc\ub2e4.\nreturn myClass\n "},{"location":"tutorial/1_import/","title":"Import - \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131","text":""},{"location":"tutorial/1_import/#_1","title":"\ub85c\ube14\ub85d\uc2a4 \uc624\ube0c\uc81d\ud2b8 \ubd88\ub7ec\uc624\uae30","text":"Frame \uacfc \uac19\uc740 UI \uc624\ube0c\uc81d\ud2b8\ub97c \ub9cc\ub4e4\uace0 \uc2f6\uc740 \uacbd\uc6b0 \uba3c\uc800 import \ub97c \uc774\uc6a9\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc774 \uc785\ub825\ud574\ubcf4\uc138\uc694!
local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal Frame = Class \"Frame\"\n\nprint(\n Frame {\n Name = \"Wow!\";\n -- \ub2e4\uc74c\uacfc \uac19\uc774 \uc790\uc2dd\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n Frame {\n Name = \"Child\";\n };\n }\n)\n \ub098\uc911\uc5d0 \uc790\uc2e0\ub9cc\uc758 UI \uc624\ube0c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc9c0\ub9cc, \uc77c\ubc18\uc801\uc778 \ub85c\ube14\ub85d\uc2a4\uac00 \uc9c0\uc6d0\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\uc758 \uacbd\uc6b0 Class(ClassName:string) \uc73c\ub85c \ubd88\ub7ec\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/1_import/#class","title":"\ubd88\ub7ec\uc628 Class \uc5d0 \uae30\ubcf8\uac12 \uc124\uc815","text":"\ubd88\ub7ec\uc628 Class \uc5d0 \uae30\ubcf8\uac12\uc744 \uc124\uc815\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 BorderSizePixel \uc640 \uac19\uc774 \uc790\uc8fc \uc0ac\uc6a9\ub420 \uc218 \uc788\ub294 \ud504\ub85c\ud37c\ud2f0\ub97c \ubbf8\ub9ac \uc9c0\uc815\ud574 \ub458 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal FrameWithoutBorder = Class \"Frame\"\nFrameWithoutBorder.BorderSizePixel = 0\n\nlocal FrameWithBorder = Class \"Frame\"\nFrameWithBorder.BorderSizePixel = 1\n\nlocal frame1 = FrameWithoutBorder {}\nlocal frame2 = FrameWithBorder {}\nlocal frame3 = FrameWithBorder {\n -- \uac12\uc744 \ub36e\uc5b4 \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n -- \uc774\ub807\uac8c \ud558\uba74 \uae30\ubcf8\uac12\uc774 \ubb34\uc2dc\ub429\ub2c8\ub2e4.\n BorderSizePixel = 0;\n}\n\nprint(frame1.FrameWithBorder.BorderSizePixel)\nprint(frame2.FrameWithBorder.BorderSizePixel)\nprint(frame3.FrameWithBorder.BorderSizePixel)\n \uc774\uc81c \uadf8\ub824\ub0b8 \ud504\ub808\uc784\uc744 \ud654\uba74\uc5d0 \uadf8\ub824\ubcf4\uace0 \uc2f6\ub098\uc694? \ub2e4\uc74c \ud29c\ud1a0\ub9ac\uc5bc Mount \ub97c \ud655\uc778\ud574\ubcf4\uc138\uc694!
"},{"location":"tutorial/2_mount/","title":"Mount - \ud654\uba74\uc5d0 UI \ud45c\ud604","text":""},{"location":"tutorial/2_mount/#ui","title":"\ud654\uba74\uc5d0 UI \ub97c \ud45c\uc2dc\ud558\uae30","text":"Quad \ubaa8\ub4c8\uc5d0\uc11c \ubaa8\ub4e0 Parent \ucc98\ub9ac\ub294 Mount \ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4. Mount(to:any,...item:any?)->mounts \ud568\uc218\ub97c \uc774\uc6a9\ud558\uba74 \ub2e4\ub8e8\ub294 \uc624\ube0c\uc81d\ud2b8\uac00 \ub85c\ube14\ub85d\uc2a4 Instance \uc778\uc9c0, \ud5a5\ud6c4 \uc18c\uac1c\ub420 Quad \ud655\uc7a5 \ud074\ub798\uc2a4\uc778\uc9c0 \uc0c1\uad00\uc5c6\uc774 \uc54c\uc544\uc11c Parent \uac00 \ucc98\ub9ac\ub429\ub2c8\ub2e4.
--- StarterGui \uc548\uc5d0 ScreenGui \ub97c \ub123\uace0 \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\ub85c \uc785\ub825\ud574\ubcf4\uc138\uc694\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nMount(ScreenGui,\n Frame {\n Name = \"Wow!\";\n }\n --[[\n , Frame {} , Frame {}\n \ub354\ub9ce\uc740 \uc624\ube0c\uc81d\ud2b8\ub97c \ub2e4\uac19\uc774 Mount \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n ]]\n)\n "},{"location":"tutorial/2_mount/#_1","title":"\ub9c8\uc6b4\ud2b8 \uac1d\uccb4","text":"\ud3b8\uc758\ub97c \uc704\ud574\uc11c Mount \ud568\uc218\ub294 mounts \ub77c\ub294 \uac1d\uccb4\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. \uc774\uac83\uc744 \uc774\uc6a9\ud558\uba74 \ud544\uc694\uc5d0 \ub530\ub77c\uc11c Mount \uc0c1\ud0dc\ub97c \ud574\uc81c\ud558\uac70\ub098 \ucd94\uac00 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. mounts \uac1d\uccb4\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc18c\ub4dc\ub97c \uac00\uc9d1\ub2c8\ub2e4.
:Unmount()
\uc774\ub807\uac8c \ud558\uba74 \ub9c8\uc6b4\ud2b8\ub41c Instance \ub97c \uc9c0\uc6cc\ubc84\ub9bd\ub2c8\ub2e4. Quad \ub294 \uc548\uc804\ud55c \uba54\ubaa8\ub9ac \uad00\ub9ac\ub97c \uc704\ud574 gc \uc758 \uae30\ub2a5\uc5d0 \uc758\uc874\ud558\ubbc0\ub85c, gc \uc2dc\uac04\ucc28\ub85c \uc778\ud574 Store.GetObject \uc5d0\uc11c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0ac\ub77c\uc9c0\ub294\ub370 \uc2dc\uac04\uc774 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui,mainFrame)\n\nlocal childFrame = Frame {}\nlocal childFrameMount = Mount(mainFrame,childFrame)\nchildFrameMount:Unmount()\n-- childFrame \uc740 \ub2e8\uc21c\ud788 .Parent = nil \ub418\ub294 \uac83\uc744 \ub118\uc5b4 \uba54\ubaa8\ub9ac\uc5d0\uc11c \uc0ac\ub77c\uc9d1\ub2c8\ub2e4\n-- \uc989, Destroy() \uac00 \ud638\ucd9c\ub429\ub2c8\ub2e4\n :Add(item:any)
Mount \uc5d0 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ucc98\uc74c \uc124\uc815\ud55c to \uac12\uc744 \ub530\ub77c \ubd80\ubaa8\uac00 \uacb0\uc815\ub429\ub2c8\ub2e4.
\uc774 \ub3d9\uc791\uc740 \ub9ac\uc2a4\ud2b8\ub97c \ub9cc\ub4e4 \ub54c \uc720\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc\ub85c\ub4dc \ub3d9\uc791\uc2dc \uc9c1\uc811 \uc81c\uac70\uac00 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui, mainFrame)\n\nlocal lastListMount = Mount(mainFrame)\nlocal function refreshList()\n lastListMount:Unmount() -- \uc774\uc804 children \uc744 \uc54c\uc544\uc11c \uc81c\uac70\ud569\ub2c8\ub2e4\n for i = 1,10 do\n lastListMount:Add(Frame { Name = tostring(i) })\n end\nend\n\ntask.spawn(function()\n while true do\n refreshList()\n task.wait(2)\n end\nend)\n \ub2e4\uc74c\uacfc \uac19\uc774 \uc774\uc804 children \uc744 \uac04\uc811\uc801\uc73c\ub85c \uc81c\uac70\ud558\uace0 \uc0c8\ub85c\uc6b4 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e8 ScrollFrame \uc758 \uacbd\uc6b0 CanvasPosition\uc774 \ucd08\uae30\ud654 \ub418\uc5b4\ubc84\ub9ac\ubbc0\ub85c \uc790\uc2dd\ub4e4\uc744 :Unmount() \ud558\uae30 \uc804\uc5d0 \uc704\uce58\ub97c \uc800\uc7a5\ud558\uace0 \ub2e4\uc2dc \ubd88\ub7ec\uc640\uc57c \ud569\ub2c8\ub2e4
"},{"location":"tutorial/3_getObject/","title":"GetObject - \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc544\uc774\ub514 \ubd80\uc5ec","text":"\uc77d\uae30 \uc804... \ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Store.GetObject \uac00 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Store.GetObject \ub294 \uacf5\uc720\ub429\ub2c8\ub2e4
"},{"location":"tutorial/3_getObject/#_1","title":"\uc624\ube0c\uc81d\ud2b8\uc5d0 \uc544\uc774\ub514 \ubd80\uc5ec\ud558\uae30, \uc0ac\uc6a9\ud558\uae30","text":"\ubcc0\uc218\uc5d0 \ub9cc\ub4e4\uc5b4\uc9c4 \uc624\ube0c\uc81d\ud2b8\ub97c \ud558\ub098\ud558\ub098 \uc800\uc7a5\ud574\uc57c\ud558\ub098\uc694? \uc544\ub2c8\uc694, Quad \uc5d0\ub294 \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount,Store = Quad.Class,Quad.Mount,Quad.Store\n\nlocal Frame = Class \"Frame\"\n\nFrame \"mainFrame\" {\n Size = UDim2.fromScale(1,1);\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n \uc544\uc774\ub514\uc5d0 \ud5c8\uc6a9\ub418\ub294 \uae00\uc790\ub294 \ubcc0\uc218\uba85\uacfc \uac19\uc2b5\ub2c8\ub2e4. \ub300\uc18c\ubb38\uc790, \uc22b\uc790, \uc5b8\ub354\ubc14(_) \ub97c \ud5c8\uc6a9\ud569\ub2c8\ub2e4. \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc Frame \"mainFrame\" {} \uc640 \uac19\uc774 id \uac12\uc744 \uc9c0\uc815\ud574 \uc900\ub2e4\uba74 \uc0dd\uc131\ub41c \uc624\ube0c\uc81d\ud2b8\ub294 \uadf8 \uc544\uc774\ub514\ub97c \uac00\uc9c0\uac8c \ub429\ub2c8\ub2e4. Store.GetObject(id:string)->Object \ub294 \uc0dd\uc131\ub41c \uac1d\uccb4\uc911 \uac00\uc7a5 \uccab\ubc88\uc9f8\uc758 id \uac00 \uc77c\uce58\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \ubc18\ud658\ud574 \uc90d\ub2c8\ub2e4.
local index = 1\nFrame (\"mainFrame\" .. index) {}\nprint(Store.GetObject(\"mainFrame\" .. index))\n \uc704\ucc98\ub7fc \uc0dd\uc131\uc774\ub098 \uac00\uc838\uc624\uae30\uc5d0\uc11c \uc2dd\uc744 \ub9cc\ub4e4\uc5b4 \ub123\uc744 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.
"},{"location":"tutorial/3_getObject/#_2","title":"\ub2e4\ub7c9\uc758 \uc624\ube0c\uc81d\ud2b8\ub97c \ub2e4\ub8e8\uae30","text":"\uc8fc\uc758 Store.GetObjects\uc758 \ubc18\ud658\uac12\uc778 objectList\ub294 \uce90\uc2dc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4. objectList\ub97c local \uc5d0 \ub123\uace0 \uacc4\uc18d\ud574\uc11c \uc720\uc9c0\uc2dc\ud0a4\uc9c0 \ub9c8\uc2ed\uc2dc\uc624, \ubc18\ud658\uac12\uc740 \uc790\ub3d9\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8 \ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
Quad \ub294 \ub2e4\ub7c9\uc758 \uc624\ube0c\uc81d\ud2b8\ub97c \ub2e4\ub8e8\uae30 \ud3b8\ud558\ub3c4\ub85d Store.GetObjects(id:string)->objectList \ub77c\ub294 \ud568\uc218\ub97c \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4.
\uc2e4\ud5d8\uc73c\ub85c, \uc0c9\uae54\uc774 \ub79c\ub364\ud558\uac8c \ubc14\ub00c\ub294 \ud504\ub808\uc784\ub4e4\uc744 \ub9cc\ub4e4\uc5b4 \ubd05\uc2dc\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount,Store = Quad.Class,Quad.Mount,Quad.Store\n\nlocal Frame = Class \"Frame\"\n\nFrame \"mainFrame\" {\n Size = UDim2.fromScale(1,1);\n Frame \"Child\" {\n Size = UDim2.fromOffset(20,20);\n };\n Frame \"Child\" {\n Size = UDim2.fromOffset(20,20);\n Position = UDim2.fromOffset(30,0);\n };\n Frame \"Child\" {\n Size = UDim2.fromOffset(20,20);\n Position = UDim2.fromOffset(60,0);\n };\n Frame \"Child\" {\n Size = UDim2.fromOffset(20,20);\n Position = UDim2.fromOffset(90,0);\n };\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- \uac12\uc744 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uac12\uc744 \uc77d\uac70\ub098 :Connect \ud560 \uc218\ub294 \uc5c6\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"Child\").Size = UDim2.fromOffset(30,30)\n\n-- \ud544\uc694\uc5d0 \ub530\ub77c Store.GetObjects(\"Child\") \ub97c pairs \uc5d0 \ub123\uc5b4 for \ubb38\uc744 \uc0ac\uc6a9\ud558\uac70\ub098\n-- :Each , :EachAsync , :IsEmpty \ud568\uc218\ub97c \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\ntask.spawn(function()\n while true do\n Store.GetObjects(\"Child\"):Each(function (item, index)\n item.BackgroundColor3 = Color3.fromRGB(\n math.random(0,255),\n math.random(0,255),\n math.random(0,255)\n )\n end)\n task.wait(1)\n end)\nend\n\n-- for \ubb38\uc744 \uc774\uc6a9\ud574\uc11c \ucd9c\ub825\ud569\ub2c8\ub2e4\nfor _,child in ipairs(Store.GetObjects(\"Child\")) do\n print(child)\nend\n "},{"location":"tutorial/3_getObject/#objectlist","title":"objectList","text":"Store.GetObjects() \uc758 \ubc18\ud658 objectList \uc758 \uba54\uc18c\ub4dc\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
:Each((item:any, index:number)->())
\uc77c\ubc18\uc801\uc778 \ubc18\ubcf5\uc785\ub2c8\ub2e4. for \ub97c \uc0ac\uc6a9\ud558\ub294\uac83\uacfc \ud6a8\uacfc\uac00 \uac19\uc73c\ub098 \ud568\uc218\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4
:EachAsync((item:any, index:number)->())
\ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uace0 \ubc14\ub85c\ubc14\ub85c \ub2e4\uc74c \uc544\uc774\ud15c\uc73c\ub85c \ub118\uc5b4\uac11\ub2c8\ub2e4. \ucf54\ub8e8\ud2f4\uc774 \uc774\uc6a9\ub429\ub2c8\ub2e4. wrap() \ucf54\ub8e8\ud2f4\uc744 \ubaa8\ub974\uac70\ub098, \ud544\uc694\uc131\uc774 \uc5c6\ub294\uacbd\uc6b0 \uc77c\ubc18\uc801\uc73c\ub85c :Each \ub97c \uc0ac\uc6a9\ud574\ub3c4 \ub429\ub2c8\ub2e4
:IsEmpty()
\uc774 ObjectList \uac00 \ube44\uc5b4\uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.
:Remove(indexOrItem:number|any)
objectList \uc5d0\uc11c \ud574\ub2f9\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4. , & \ub97c \uc0ac\uc6a9\ud55c \uace0\uae09 \uac80\uc0c9\uc5d0\uc11c\ub294 \uc791\ub3d9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/3_getObject/#id","title":"\uace0\uae09 ID \uc0ac\uc6a9\ud558\uae30","text":"id \uae30\ub2a5\uc744 \uc870\uae08\ub354 \uace0\uae09\uc801\uc778 \ubc29\ubc95\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.
\uc6a9\ubc95\uc608\uc81c -- \ub450 \uc544\uc774\ub514\ub97c \uac00\uc9c4 \ud504\ub808\uc784\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4\nFrame \"a,b\" {}\n-- a \ub97c \uac00\uc9c4\uac83\uacfc, a \uc640 b \ub97c \uac00\uc9c4\uac83\uc744 \uac00\uc838\uc635\ub2c8\ub2e4\nStore.GetObjects(\"a,a&b\"):Each(function(item)\n print(item)\nend)\n \uc880\ub354 \uc9c1\uad00\uc801\uc778 \ud655\uc778\uc744 \uc704\ud574\uc11c \uc791\ub3d9\uc2dc\ucf1c\ubcf4\uc138\uc694.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Mount\nlocal Mount = Quad.Store\nlocal Store = Quad.Class\n\nlocal Frame = Class \"Frame\"\n\n--\ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ubaa8\ub450 \uac00\uc9c4 \ud504\ub808\uc784\uc744 \uc0dd\uc131\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\nFrame \"a,b\" {\n Name = \"main\";\n Frame \"a\" {\n Name = \"Child1\";\n };\n Frame \"b\" {\n Name = \"Child2\";\n };\n}\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ub458\ub2e4 \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a,b\"):Each(function(item, index)\n print(item.Name)\nend)\nprint(\"----\")\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ub97c \ub3d9\uc2dc\uc5d0 \uac00\uc9c4 \uac83\uc744 \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a&b\"):Each(function(item, index)\n print(item.Name)\nend)\nprint(\"----\")\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a\uc640b \ub97c \ub3d9\uc2dc\uc5d0 \uac00\uc9c4\uac83\uacfc, b \ub97c \uac00\uc9c4\uac83\uc744 \uc120\ud0dd\n-- \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a&b,b\"):Each(function(item, index)\n print(item.Name)\nend)\n \ub610\ub294(or) \uc5f0\uc0b0 , \uadf8\ub9ac\uace0(and) \uc5f0\uc0b0 & GetObjects \uc5d0\ub294 \uc774 \ub450 \uc5f0\uc0b0\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uace0, \uc0dd\uc131\uc2dc\uc5d0\ub294 , \uc73c\ub85c \uc5ec\ub7ec \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub744\uc5b4\uc4f0\uae30\ub294 \ubb34\uc2dc\ub429\ub2c8\ub2e4
\uc8fc\uc758 \uace0\uae09 ID \uc0ac\uc6a9\uc2dc objectList:Remove \uba54\uc18c\ub4dc\ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/3_getObject/#id_1","title":"id \ucd94\uac00\uc640 \uc81c\uac70","text":"\uacbd\uc6b0\uc5d0 \ub530\ub77c \uc774\ubbf8 \uc0dd\uc131\ud55c \uc624\ube0c\uc81d\ud2b8\uc5d0 id \ub97c \ucd94\uac00 \ud639\uc740 \uc81c\uac70\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Store = Quad.Store\n\nlocal Frame = Class \"Frame\"\n\nFrame \"testing\" {}\n\n-- \uc544\uc774\ub514\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4\nStore.AddObject(\n \"a,b\", Store.GetObject(\"testing\")\n)\n\n-- \uc544\uc774\ub514\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4\nStore.GetObjects(\"a\"):Remove(Store.GetObject(\"testing\"))\n Store.AddObject(ids:string, item:any) \ub97c \uc774\uc6a9\ud574 item \uc5d0 \uc544\uc774\ub514\ub97c \ucd94\uac00\ud558\uace0 :Remove(item:any) \ub97c \uc774\uc6a9\ud574 item \uc5d0 \uc544\uc774\ub514\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4
"},{"location":"tutorial/4_style/","title":"Style - \uc18d\uc131 \uac12 \ubc88\ub4e4\ub9c1","text":"\uc77d\uae30 \uc804... \ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Style \uae30\ub2a5\uc774 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Style \ub294 \uacf5\uc720\ub429\ub2c8\ub2e4
"},{"location":"tutorial/4_style/#_1","title":"\ubc18\ubcf5\ub418\ub294 \uc18d\uc131\uac12\uc744 \uc904\uc774\uae30","text":"Quad \uc5d0\uc11c\ub294 \ubc18\ubcf5\uc801\uc778 \uc18d\uc131\ub4e4\uc744 \uc904\uc5ec \uc4f8 \uc218 \uc788\ub3c4\ub85d Style \uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\n\n-- \uc0c8\ub85c\uc6b4 \uc2a4\ud0c0\uc77c\uc744 \ud558\ub098 \ub9cc\ub4ed\ub2c8\ub2e4\nlocal myStyle = Style {\n Size = UDim2.fromOffset(20,20);\n BackgroundColor3 = Color3.fromRGB(255,255,0);\n BackgroundTransparency = 0.5;\n}\n\nFrame \"mainFrame\" {\n Size = UDim2.fromScale(1,1);\n Frame \"Child\" {\n myStyle; -- \uc2a4\ud0c0\uc77c\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4!\n };\n Frame \"Child\" {\n Position = UDim2.fromOffset(30,0);\n myStyle;\n };\n Frame \"Child\" {\n Position = UDim2.fromOffset(60,0);\n myStyle;\n };\n Frame \"Child\" {\n Position = UDim2.fromOffset(90,0);\n -- \uc2a4\ud0c0\uc77c\uc740 \ub36e\uc5b4\uc368 \uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n BackgroundColor3 = Color3.fromRGB(255,0,0);\n myStyle;\n };\n}\n\nMount(ScreenGUI,Store.GetObject(\"mainFrame\"))\n Style\uc744 \uc0ac\uc6a9\ud558\uba74 \ub9ce\uc740 \uc591\uc758 \uc18d\uc131\uc744 \ud558\ub098\uc5d0 \ubcc0\uc218\ub85c \uc9d1\uc5b4\ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Style\uc744 \uc0ac\uc6a9\ud574\uc11c \ub9ce\uc740 \uc591\uc758 \ucf54\ub4dc\ub97c \uc904\uc5ec\ubcf4\uc138\uc694
"},{"location":"tutorial/4_style/#id","title":"ID \ub85c \ud0c0\uac9f\uc744 \uc9c0\uc815\ud558\uae30","text":"Style\uc5d0\ub294 \ud0c0\uac9f id\ub97c \uc9c0\uc815\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\n\n-- \uc5ec\uae30\uc5d0\ub294 & \ub098 , \uac00 \uc801\uc6a9\ub418\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4!\nStyle \"Child\" {\n Size = UDim2.fromOffset(20,20);\n BackgroundColor3 = Color3.fromRGB(255,255,0);\n BackgroundTransparency = 0.5;\n}\n\n-- \ub2e8, Style\uc740 \uba3c\uc800 \uc120\uc5b8\ud574\uc57c\ud569\ub2c8\ub2e4, Frame\uc744 \uba3c\uc800 \ub9cc\ub4e4\uace0\n-- Style\uc744 \uc120\uc5b8\ud558\uba74 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\nFrame \"mainFrame\" {\n Size = UDim2.fromScale(1,1);\n Frame \"Child\" {};\n Frame \"Child\" { Position = UDim2.fromOffset(30,0) };\n}\n\nMount(ScreenGUI,Store.GetObject(\"mainFrame\"))\n Style(id:string){ any }\ub97c \uc774\uc6a9\ud574 \uc2a4\ud0c0\uc77c\uc744 \uc120\uc5b8\ud574\uc8fc\uba74 \ub098\uc911\uc5d0 \ud574\ub2f9 id\ub97c \uac00\uc9c4 \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc \ud574\ub2f9 \uc2a4\ud0c0\uc77c\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4.
"},{"location":"tutorial/5_event/","title":"Event - \uc774\ubca4\ud2b8 \ud578\ub4e4\ub9c1","text":""},{"location":"tutorial/5_event/#_1","title":"\uc774\ubca4\ud2b8 \ub4f1\ub85d\ud558\uae30","text":"MouseButton1Click \ud639\uc740 GetPropertyChangedSignal \uac19\uc740 \ub85c\ube14 \uae30\ubcf8 \uc774\ubca4\ud2b8\ub97c \uac04\ub2e8\ud558\uac8c \ub4f1\ub85d\ud558\uace0 \uc2f6\uc73c\uc2e0\uac00\uc694? Event \ub97c \uc774\uc6a9\ud574\ubcf4\uc138\uc694.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Event = Quad.Event\nlocal Store = Quad.Store\n\nlocal TextButton = Class \"TextButton\"\nlocal Count = 0\n\nTextButton \"mainButton\" {\n Size = UDim2.fromOffset(200,200);\n Text = \"0 \ubc88 \ud074\ub9ad\ud588\uc2b5\ub2c8\ub2e4\";\n [Event \"MouseButton1Click\"] = function(self,x,y)\n Count = Count + 1\n self.Text = Count .. \" \ubc88 \ud074\ub9ad\ud588\uc2b5\ub2c8\ub2e4\"\n end;\n}\nMount(ScreenGUI, Store.GetObject(\"mainButton\"))\n "},{"location":"tutorial/5_event/#_2","title":"\uc774\ubc34\ud2b8 \ub9ac\uc2a4\ud2b8","text":"\uc801\uc6a9\uac00\ub2a5\ud55c Event \ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4
Event(name:string)
\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 \uc774\ubca4\ud2b8\ub4e4\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4, MouseEnter, MouseLeave, MouseButton1Down, MouseButton1Up \ub4f1\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4 \uae30\ubcf8\uc801\uc73c\ub85c \ub85c\ube14\ub85d\uc2a4\uc758 \uae30\ubcf8 \uc774\ubca4\ud2b8\ub4e4\uacfc \ub2e4\ub974\uac8c, \uccab\ubc88\uc9f8 \uc778\uc790\ub85c self \ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
\uc6a9\ubc95\uc608\uc81c - \ubc84\ud2bc\ud074\ub9ad Frame {\n [Event \"MouseEnter\"] = function (self)\n print(self.Name .. \"\uc5d0 \ub9c8\uc6b0\uc2a4\uac00 \uc62c\ub77c\uc654\uc2b5\ub2c8\ub2e4\")\n end;\n}\n local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal TextButton = Class \"TextButton\"\n\nTextButton \"mainButton\" {\n Size = UDim2.fromOffset(200,200);\n [Event \"MouseEnter\"] = function (self)\n print(\"\ubc84\ud2bc\uc774 \ud074\ub9ad\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n end;\n}\nMount(ScreenGUI, Store.GetObject(\"mainButton\"))\n Event.Created
\uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub418\uc5c8\uc744 \ub54c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uc778\uc790\ub85c self \ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nFrame {\n [Event.Created] = function (self)\n print(self.Name .. \"\uc774 \uc0dd\uc131\ub418\uc5c8\uc5b4\uc694\")\n end;\n}\n \uc8fc\uc758 Event.Created \uac00 \uc2e4\ud589\ub420 \ub54c\ub294 Parent \uac12\uc774 \uc815\ud574\uc9c0\uc9c0 \uc54a\uc558\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. self.Parent \ub294 \uc811\uadfc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4. Class.Extend \uc5d0\uc11c\ub294 AfterRender \ub97c \uc774\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.
Event.CreatedAsync
Event.Created \uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc, \ucf54\ub8e8\ud2f4 \uc548\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4. objectList:EachAsync() \ucc98\ub7fc \ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nFrame {\n Frame {\n Name = \"A\";\n [Event.CreatedAsync] = function (self)\n -- \uc774 \ud568\uc218\uac00 \ub05d\ub098\uc9c0 \uc54a\ub354\ub77c\ub3c4 \ub2e4\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \uc218 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4\n task.wait(5)\n end;\n };\n Frame {\n Name = \"B\";\n [Event.Created] = function (self)\n print(self.Name .. \"\uac00 \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n end;\n };\n}\n \uc8fc\uc758 Event.CreatedAsync \uac00 \uc2e4\ud589\ub420 \ub54c\ub294 Parent \uac12\uc774 \uc815\ud574\uc9c0\uc9c0 \uc54a\uc558\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. self.Parent \ub294 \uc811\uadfc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4.
Event.Prop(propertyName:string)
\ud504\ub85c\ud37c\ud2f0 \uac12\uc774 \ubcc0\uacbd\ub428\uc744 \uc5f0\uacb0\ud569\ub2c8\ub2e4.
-- \uc6a9\ubc95\nTextBox {\n Text = \"\uc544\ubb34\uac70\ub098 \uc785\ub825\ud558\uc138\uc694\";\n [Event.Prop \"Text\"] = function (self,text)\n -- \ud3b8\uc758\uc0c1\uc758 \uc774\uc720\ub85c \ubcc0\uacbd\ub41c \uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4\n print(text)\n end;\n}\n "},{"location":"tutorial/6_tween/","title":"Tween - \ud2b8\uc708\ud6a8\uacfc","text":""},{"location":"tutorial/6_tween/#_1","title":"\ud2b8\uc704\ub2dd","text":"Quad\uc5d0\ub294 \ud2b8\uc708\uc744 \ub3c4\uc640\uc8fc\ub294 \ubaa8\ub4c8\uc774 \ub0b4\uc7a5\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud2b8\uc708 \ubaa8\ub4c8\uc740 \ub2e8\uc21c\ud55c Instance\ub4e4\uc744 \ub118\uc5b4\uc11c table \ud615\uc2dd\ub3c4 \ud2b8\uc708\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ub098\uc911\uc5d0 \ucee4\uc2a4\ud140 \uc624\ube0c\uc81d\ud2b8\ub97c \ud2b8\uc708\ud560 \ub54c \uc720\uc6a9\ud569\ub2c8\ub2e4. Quad \uc5d0\uc11c\ub294 \uc2e4\uc81c\ub85c \uc9c1\uc811\uc801\uc73c\ub85c Tween \uc744 \uc0ac\uc6a9\ud560 \uc77c\uc740 \uc801\uc73c\uba70 \ucd94\ud6c4 \uc124\uba85\ub418\ub294 register:Tween()\ub85c \uc0ac\uc6a9\ud558\ub294\uac83\uc774 \uad8c\uc7a5\ub429\ub2c8\ub2e4.
\ud2b8\uc708\uc740 \uc77c\ubc18\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc774 \uc218\ud589\ud569\ub2c8\ub2e4.
\uc6a9\ubc95\uc608\uc81c - \uc6c0\uc9c1\uc774\ub294 \ubc84\ud2bc Tween.RunTween(myFrame,{\n -- \ud2b8\uc708 \uc635\uc158\n Easing = Tween.Easing.Expo;\n Direction = Tween.Directions.Out;\n Time = 1;\n ...\n},{\n -- \ud504\ub85c\ud37c\ud2f0 \ubaa9\ub85d\n})\n \ud074\ub9ad\uc2dc \uc6c0\uc9c1\uc774\ub294 \ubc84\ud2bc\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Tween = Quad.Tween\n\nlocal Frame = Class \"Frame\"\nlocal TextButton = Class \"TextButton\"\nlocal on = false\n\nFrame \"mainFrame\" {\n Size = UDim2.fromOffset(300,300);\n BackgroundColor3 = Color3.fromRGB(255,255,255);\n TextButton \"Child\" {\n Text = \"Click Me!\";\n BackgroundColor3 = Color3.fromRGB(255,100,255);\n Position = UDim2.fromOffset(80,100);\n Size = UDim2.fromOffset(20,20);\n [Event \"MouseButton1Click\"] = function(self,x,y)\n on = not on\n Tween.RunTween(self,{\n -- \ud2b8\uc708 \uc635\uc158\uc785\ub2c8\ub2e4. \uc544\ub798\uc5d0\uc11c \uc124\uba85\ub429\ub2c8\ub2e4\n Easing = Tween.Easing.Expo;\n Direction = Tween.Directions.Out;\n Time = 1;\n },{\n -- \ud2b8\uc708\ud560 \ubaa9\ud45c \ud504\ub85c\ud37c\ud2f0\uc785\ub2c8\ub2e4\n Position = on\n and UDim2.fromOffset(200,100)\n or UDim2.fromOffset(80,100);\n })\n end;\n };\n}\n\nMount(ScreenGUI, Store.GetObejct(\"mainFrame\"))\n "},{"location":"tutorial/6_tween/#_2","title":"\ud2b8\uc708 \uc635\uc158","text":"\ud2b8\uc708\uc5d0\ub294 \ud2b8\uc708 \uc635\uc158\uc774 \ub4e4\uc5b4\uac00\uba70, \uc5ec\uae30\uc5d0\ub294 \ud2b8\uc708\uc758 \ubc29\ud5a5, \uac00\uac10\uc18d, \uc2dc\uac04 \ub4f1\uc744 \uc124\uc815\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub123\uc744 \uc218 \uc788\ub294 \ud2b8\uc708 \uc635\uc158\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
OPTION Time:number?
\ud2b8\uc708\uc758 \ucd1d \uae38\uc774\ub97c \uc815\ud569\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 1\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
OPTION Easing:string|(index:number)->number?
\ud2b8\uc708\uc758 \uac00\uac10\uc18d \uc815\ub3c4\ub97c \uacb0\uc815\ud569\ub2c8\ub2e4. \ubb38\uc790\uc5f4 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uac70\ub098, Tween.Easings.Linear\uc640 \uac19\uc774 \uc5f4\uac70\ud615 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud639\uc740 \ud544\uc694\uc5d0 \ub530\ub77c \ud568\uc218\ub97c \uc9c0\uc815\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ud568\uc218\ub97c Easing \uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c 1\ucc28 \uc9c4\ud589\ub3c4 (Linear, 0 \uc5d0\uc11c 1 \uc0ac\uc774\uc758 \uac12) \uac12\uc774 \uc8fc\uc5b4\uc9c0\uba70, \uacc4\uc0b0 \uacb0\uacfc\ub85c \uc2e4\uc81c \uc801\uc6a9\ub420 \uc704\uce58\ub97c \ubc18\ud658\ud574\uc57c\ud569\ub2c8\ub2e4. \ubc18\ud658\uac12\uc740 \uc74c\uc218\uc774\uac70\ub098 1 \ubcf4\ub2e4 \ud074 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 Exp2\uac00 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
type Easing =\n\"Linear\" // \uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615\n|\"Quint\" // 5 \uc81c\uacf1\n|\"Quart\" // \ub124\uc81c\uacf1\n|\"Cubic\" // \uc138\uc81c\uacf1\n|\"Quad\" // \uc81c\uacf1\n|\"Sin\" // \uc0ac\uc778 \ud30c\ud615\n|\"Circle\" // \uc0ac\ubd84\uc6d0\n|\"Expo\" // \uc9c0\uc218\ud615\n|\"Elastic\" // \ud0c4\uc131\n|\"Bounce\" // \ud280\uc5b4\uc624\ub984\n|\"Back\" // \ub4a4\ub85c \uac00\uac10\uc18d\n|\"Exp2\" // \ub35c \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 to 2\n|\"Exp4\" // \ub354 \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 ~ 4\n|EasingFunction?;\n \ud568\uc218\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \uc124\uba85\uacfc \ubbf8\ub9ac\ubcf4\uae30\ub294 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694 OPTION Direction:string?
\ud2b8\uc708\uc774 \uc9c4\ud589\ub418\ub294 \ubc29\ud5a5\uc785\ub2c8\ub2e4. \ubb38\uc790\uc5f4 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uac70\ub098, Tween.Directions.Out\uacfc \uac19\uc774 \uc5f4\uac70\ud615 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 Out\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
type Direction =\n// \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.\n\"Out\"\n// \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.\n|\"In\"\n//\uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.\n|\"InOut\"\n \ubc29\ud5a5\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \uc124\uba85\uacfc \ubbf8\ub9ac\ubcf4\uae30\ub294 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694 OPTION CallBack:{[number|\"*\"|string]:(Item:any, Alpha:number, AbsolutePercent:number)->()}?
\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uc2e4\ud589\uc911\uc778 \ub3c4\uc911\uc5d0 \ud568\uc218\ub97c \uc2e4\ud589\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud2b8\uc708\uc758 \uc9c4\ud589 \uc815\ub3c4\uc5d0 \ub530\ub77c\uc11c \ud55c\ubc88 \ud568\uc218\uac00 \uc2e4\ud589\ub418\uac70\ub098 \ud2b8\uc708 \uc9c4\ud589\uc911 \uacc4\uc18d\ud574\uc11c \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc778\ub371\uc2a4\uac00 \uc22b\uc790\uc778 \uacbd\uc6b0 \ud574\ub2f9 \uc9c0\uc810\uc744 \ub118\uc744 \ub54c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc73c\uba70, \"*\" \ub97c \uc778\ub371\uc2a4\ub85c \uc0ac\uc6a9\ud558\uba74 \ubaa8\ub4e0 \ubd80\ubd84\uc5d0\uc11c \ud568\uc218\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4. \ud568\uc218\uc5d0\ub294 \ud3b8\uc758\uc0c1 \ud2b8\uc708\uc744 \ud558\uace0\uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \uc704\uce58\uac12, \uc2dc\uac04\ub9cc\uc744 \uace0\ub824\ud55c 1\ucc28 \uc704\uce58\uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
OPTION OnStepped:(Item:any, Alpha:number, AbsolutePercent:number)->()?
CallBack \uc5d0 \"*\" \ub97c \ub123\uc740\uac83\uacfc \ub3d9\uc77c\ud55c \ud6a8\uacfc\ub97c \uac00\uc9c0\ub294 \ubcc4\uce6d\uc785\ub2c8\ub2e4
OPTION Ended:(Item:any, Alpha:number, AbsolutePercent:number)->()?
CallBack \uc5d0 1\uc744 \ub123\uc740\uac83\uacfc \ub3d9\uc77c\ud55c \ud6a8\uacfc\ub97c \uac00\uc9c0\ub294 \ubcc4\uce6d\uc785\ub2c8\ub2e4
OPTION Getter:(Item:any, Property:string)->any?
\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uac12\uc744 \uc5bb\uc73c\ub824 \ud560 \ub54c \uc0ac\uc6a9\ud560 \ud568\uc218\uc785\ub2c8\ub2e4. \ud568\uc218\uc5d0 \ud2b8\uc708\ud558\uace0 \uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \ud504\ub85c\ud37c\ud2f0 \uc774\ub984\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
Warning register:Tween() \uc640 \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
OPTION Getter:(Item:any, Property:string, Value:Lerpable)->any?
\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uac12\uc744 \uc124\uc815\ud558\ub824 \ud560 \ub54c \uc0ac\uc6a9\ud560 \ud568\uc218\uc785\ub2c8\ub2e4. \ud568\uc218\uc5d0 \ud2b8\uc708\ud558\uace0 \uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \ud504\ub85c\ud37c\ud2f0 \uc774\ub984, \uc124\uc815\ud560 \uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
Warning register:Tween() \uc640 \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
"},{"location":"tutorial/6_tween/#_3","title":"\ud2b8\uc708 \ud568\uc218","text":"Quad \uc758 \ud2b8\uc708\uc5d0\ub294 \ud2b8\uc708\uc744 \uba48\ucd94\uac70\ub098 \ud2b8\uc708\uc911\uc778\uc9c0 \ud655\uc778\ud558\ub294 \ub4f1\uc758 \uc791\uc5c5\uc744 \ud560 \uc218 \uc788\ub294 \uc5ec\ub7ec \ud568\uc218\ub4e4\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.
"},{"location":"tutorial/7_quadProperty/","title":"QuadProperty - \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0","text":"\uc8fc\uc758\uc0ac\ud56d \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0\ub294 Tween \uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 register\uc758 :Tween()\uc758 \uacbd\uc6b0 \ud638\ud658\ub418\ubbc0\ub85c, \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0 \uac12\uc744 \ud2b8\uc708\ud558\ub824\uba74 \ud5a5\ud6c4 \uc124\uba85\ub418\ub294 register \uc640 \ud568\uae68 \uc0ac\uc6a9\ud574\uc57c\ud569\ub2c8\ub2e4.
Tween.RunTween, Tween.RunTweens \uc640\ub294 \uac19\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
"},{"location":"tutorial/7_quadProperty/#_1","title":"\ud2b9\uc218\ud55c \ud504\ub85c\ud37c\ud2f0","text":"Quad \uc5d0\uc11c\ub294 \ud3b8\ub9ac\uc131\uc744 \uc704\ud574 \uc77c\ubd80 \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ubaa8\ub4e0 \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0\ub294 \ud5a5\ud6c4 \uc18c\uac1c\ub418\ub294 register\uc640 \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal ImageFrame = Class \"ImageFrame\"\nImageFrame.BackgroundTransparency = 1\n\nFrame \"mainFrame\" {\n Size = UDim2.fromOffset(200,200);\n PaddingAllOffset = 50; -- Padding \uc744 50 \uc529 \ubaa8\ub4e0 \ubc29\ud5a5\uc73c\ub85c \uc90d\ub2c8\ub2e4\n BackgroundColor3 = Color3.fromRGB(40,40,40);\n ImageFrame {\n ImageColor3 = Color3.fromRGB(60,60,60);\n RoundSize = 16; -- \uc774\ubbf8\uc9c0\ub85c \ub77c\uc6b4\ub4dc \ud504\ub808\uc784\uc744 \ub9cc\ub4ed\ub2c8\ub2e4\n Size = UDim2.fromScale(1,1);\n ImageFrame {\n BackgroundColor3 = Color3.fromRGB(80,80,80);\n };\n };\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud504\ub85c\ud37c\ud2f0\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
RoundSize:number?
ImageLabel, ImageButton \uc5d0\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc18d\uc131\uc785\ub2c8\ub2e4. \uc6d0\ud615 \uc774\ubbf8\uc9c0\uc5d0 Slice\ub97c \uc774\uc6a9\ud574 \ub465\uadfc \ud504\ub808\uc784\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c UICorner\ubcf4\ub2e4 \ubd80\ub4dc\ub7ec\uc6b4 \ucf54\ub108\ud6a8\uacfc\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.
Corner:number?
\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 UI\uc624\ube0c\uc81d\ud2b8\uc5d0 \uc801\uc6a9\ub429\ub2c8\ub2e4. UICorner\ub97c \uc774\uc6a9\ud574 \ubaa8\uc11c\ub9ac \ubd80\ubd84\uc744 \ub465\uae00\uac8c \ub9cc\ub4ed\ub2c8\ub2e4. \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
PaddingAll:UDim?
UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. \uc0c1\ud558\uc88c\uc6b0 \ubaa8\ub450 \uac19\uc740 \uac12\uc73c\ub85c \uc801\uc6a9\ub429\ub2c8\ub2e4. PaddingAllOffset \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
PaddingAllOffset:number?
UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. PaddingAll\uacfc \uac19\uc740 \ubc29\ubc95\uc73c\ub85c \uc791\ub3d9\ud558\ub098, Offset\uac12\ub9cc \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. PaddingAll \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
Scale:number?
UIScale\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. UIScale.Scale \uacfc \uac19\uc740 \ud6a8\uacfc\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4
"},{"location":"tutorial/8_register/","title":"Register - \uac12 \ubcc0\uacbd \uc5f0\ub3d9","text":"\uc77d\uae30 \uc804... \ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Store.GetStore \uac00 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Store.GetStore \ub294 \uacf5\uc720\ub429\ub2c8\ub2e4
"},{"location":"tutorial/8_register/#_1","title":"\ub808\uc9c0\uc2a4\ud130","text":"\ub808\uc9c0\uc2a4\ud130\ub294 \ud55c \uac12\uc774 \ubcc0\uacbd\ub420 \ub54c, \uadf8 \uac12\uc744 \uc0ac\uc6a9\ud55c \uacf3\uc774 \uc5c5\ub370\uc774\ud2b8 \ub420 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4e4\uc5b4\uc8fc\ub294 Quad \uc758 \uc8fc\uc694 \uae30\uc220\uc785\ub2c8\ub2e4. \ucd94\ud6c4 \uc124\uba85\ub420 Class.Extend \uc640\ub3c4 \uac19\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
\ub808\uc9c0\uc2a4\ud130\ub294 \uc774\ub7ec\ud55c \uc2dc\ub098\ub9ac\uc624\uc5d0\uc11c \uc0ac\uc6a9\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
UI \uc758 \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub97c \ud55c\ubc88\uc5d0 \ud398\uc774\ub4dc \uc544\uc6c3 \ud639\uc740 \ud398\uc774\ub4dc \uc778 \uc2dc\ud0a4\ub294 \uacbd\uc6b0. \uac00\ubcc0 \ud06c\uae30\uc758 UI \ub97c \uc5c5\ub370\uc774\ud2b8 \uc2dc\ud0a4\ub294 \uacbd\uc6b0. \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \ud55c\uaebc\ubc88\uc5d0 \ud2b8\uc708\uc2dc\ud0a4\ub294 \uacbd\uc6b0. \ub2e4\ud06c\ud14c\ub9c8/\ud654\uc774\ud2b8\ud14c\ub9c8 \ubcc0\uacbd\ud560 \uc218 \uc788\uac8c \ub9cc\ub4dc\ub294 \uacbd\uc6b0. \uc774\uc678\uc5d0\ub3c4 \ub808\uc9c0\uc2a4\ud130\uc758 \ud65c\uc6a9 \ubc29\ubc95\uc740 \ubb34\uad81\ubb34\uc9c4\ud569\ub2c8\ub2e4. \ub808\uc9c0\uc2a4\ud130\uc758 \uc0ac\uc6a9\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
local myStore = Store.GetStore(\"myStore\")\nmyStore.color = Color3.fromRGB(255,255,255)\nFrame { BackgroundColor3 = myStore \"color\" }\n-- \uc5f0\ub3d9\ub41c \ud504\ub808\uc784\ub3c4 \uc5c5\ub370\uc774\ud2b8 \ub429\ub2c8\ub2e4\nmyStore.color = Color3.fromRGB(0,0,0)\n \uc2a4\ud1a0\uc5b4\ub97c \uc0dd\uc131\ud568. \uae30\ubcf8 \uac12\uc744 \uc124\uc815\ud568. \uc2a4\ud1a0\uc5b4\ub97c \ud638\ucd9c\ud574 \ub808\uc9c0\uc2a4\ud130\ub97c \uc5bb\uc5b4 \ub4f1\ub85d\ud568. \uc608\uc2dc \ucf54\ub4dc\ub85c \uc815\ud655\ud558\uac8c \ud655\uc778\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\n-- \ub808\uc9c0\uc2a4\ud130\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub294 \ud14c\uc774\ube14\uc744 \ub9cc\ub4ed\ub2c8\ub2e4.\n-- \uc5ec\uae30\uc5d0 \ub2f4\uc544\ub0b4\ub294 \uac12\uc744 \uc5c5\ub370\uc774\ud2b8 \ud558\ub294 \uacbd\uc6b0 \ub808\uc9c0\uc2a4\ud130\ub85c \uc5f0\uacb0\ub41c\n-- \uc624\ube0c\uc81d\ud2b8\ub4e4\ub3c4 \uac19\uc774 \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4.\nlocal myStore = Store.GetStore(\"myStore\")\nlocal TextLabel = Class \"TextLabel\"\n\nmyStore.Text = \"0 \ucd08 \uc9c0\ub0a8\"\nmyStore.Color = Color3.fromRGB(255,100,255)\n\nTextLabel \"mainLabel\" {\n Size = UDim2.fromOffset(100,200);\n -- myStore \uc758 Text \uac12\uc774 \ubcc0\uacbd\ub428\uc744 \ucd94\uc801\ud558\uace0, Text \uac12\uc744\n -- \uc5c5\ub370\uc774\ud2b8 \uc2dc\ud0b5\ub2c8\ub2e4.\n Text = myStore \"Text\";\n\n -- \uc774\uac83\uc740 \ub808\uc9c0\uc2a4\ud130\ub97c \uc0ac\uc6a9\ud558\ub294\uac83\uc774 \uc544\ub2c8\ub77c \ub2e8\uc21c\ud788 \uac12\ub9cc\n -- \ubd88\ub7ec\uc640 \ub123\uc5b4\uc8fc\ub294 \uac83\uc785\ub2c8\ub2e4. \uc790\ub3d9 \uc5c5\ub370\uc774\ud2b8\uac00 \uac00\ub2a5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n BackgroundColor3 = myStore.Color;\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainLabel\"))\n\n-- \ubc14\uafb8\ub354\ub77c\ub3c4 \ub808\uc9c0\uc2a4\ud130\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc544 \ubc18\uc601\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\nmyStore.Color = Color3.fromRGB(255,255,255)\n\nlocal Count = 1\nwhile task.wait(1) do\n -- \uac12\uc744 \uc5c5\ub370\uc774\ud2b8 \ud569\ub2c8\ub2e4. \ud14d\uc2a4\ud2b8 \ub77c\ubca8\ub3c4\n -- \uc790\ub3d9\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8 \ub429\ub2c8\ub2e4.\n myStore.Text = Count .. \" \ucd08 \uc9c0\ub0a8\"\n Count = Count + 1\nend\n "},{"location":"tutorial/8_register/#_2","title":"\ub808\uc9c0\uc2a4\ud130 \uba54\uc18c\ub4dc","text":"\ub808\uc9c0\uc2a4\ud130\uc5d0\ub294 \uc5ec\ub7ec\uac00\uc9c0 \uba54\uc18c\ub4dc\uac00 \ub2f4\uaca8\uc788\uc2b5\ub2c8\ub2e4. \uc774 \uba54\uc18c\ub4dc\ub97c \uc0ac\uc6a9\ud558\uba74 \ub808\uc9c0\uc2a4\ud130\ub97c \ubcf4\ub2e4 \ub354 \ub2e4\uc591\ud558\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
register \ud2b9\uc218 \uba54\uc18c\ub4dc\uac00 \uc801\uc6a9\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
:Add(value:any)->register
\uac12\uc5d0 \ub354\ud558\uae30\ub97c \ucde8\ud569\ub2c8\ub2e4. \uc74c\uc218\ud615\ud0dc\uac00 \uc81c\uacf5\ub418\ub294 \uacbd\uc6b0 \ube7c\uae30 \ucc98\ub7fc \uc791\ub3d9\ud569\ub2c8\ub2e4. number, Udim, UDim2, Color3, Vector2 \ub4f1 \ub354\ud560 \uc218 \uc788\ub294 \ubaa8\ub4e0\uac83\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.pos = UDim2.fromOffset(100,0)\n\nFrame \"mainFrame\" {\n Position = myStore \"pos\":Add(UDim2.fromOffset(0,100));\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile true do\n myStore.pos = myStore.pos + UDim2.fromOffset(10,0)\n task.wait(2)\nend\n \uc8fc\uc758 \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
:With((store:valueStore, newValue:any, key:string)->())->register
\ud568\uc218 \ub610\ub294 \ud14c\uc774\ube14\uc5d0\uc11c \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4. Add \ubcf4\ub2e4 \ub098\uc911\uc5d0 \uc218\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4
\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \ud568\uc218\uc608\uc81c - \ud14c\uc774\ube14 myStore \"size\":With(function (_,value)\n return value * 2\nend)\n width \uac12\uc5d0 \ub9de\ucdb0 \uc790\ub3d9\uc73c\ub85c UI \uac00 \uc5c5\ub370\uc774\ud2b8\ub418\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.topbarSize = 60\nmyStore.width = 200\n\n-- \ub808\uc9c0\uc2a4\ud130\ub97c \ubcc0\uc218\ub85c \ub450\uace0 \uc0ac\uc6a9\ud569\ub2c8\ub2e4\nlocal listItemSize = myStore \"width\":With(function()\n return UDim2.fromOffset(myStore.width,60)\nend)\n\nFrame \"mainFrame\" {\n Class \"UIListLayout\" { SortOrder = Enum.SortOrder.LayoutOrder };\n\n -- \uc0ac\uc774\uc988\uac00 width \uc5d0 \ub9de\uac8c \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4\n Size = myStore \"width\":With(function ()\n return UDim.fromOffset(store.width,400)\n end);\n\n Frame \"Topbar\" {\n LayoutOrder = 1;\n BackgroundColor3 = Color3.fromRGB(255,0,0);\n -- \uc774\ub807\uac8c \uc5ec\ub7ec \uac12\uc744 \ubb36\uc5b4\uc11c \ub450 \uac12\uc774 \ubcc0\uacbd\ub428, \ud639\uc740 \uadf8\uc774\uc0c1\uc744\n -- \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n Size = myStore \"topbarSize,width\":With(function()\n return UDim2.fromOffset(myStore.width,myStore.topbarSize)\n end);\n }\n Frame \"ListItem\" {\n LayoutOrder = 2;\n BackgroundColor3 = Color3.fromRGB(0,255,0);\n Size = listItemSize;\n };\n Frame \"ListItem\" {\n LayoutOrder = 3;\n BackgroundColor3 = Color3.fromRGB(0,0,255);\n Size = listItemSize;\n };\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- width \uac12\uc744 \ubcc0\uacbd\ud574\ubcf4\uc138\uc694\nwhile true do\n myStore.width = myStore.width + 10\n task.wait(1)\nend\n colors \ud14c\uc774\ube14 \uc548\uc5d0 \uc788\ub294 \uc0c9\uae54\ub4e4\uc744 \ub3cc\uc544\uac00\uba70 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nlocal colors = {\n Color3.fromRGB(255,255,255);\n Color3.fromRGB(255,255,0);\n Color3.fromRGB(0,255,255);\n Color3.fromRGB(255,0,255);\n Color3.fromRGB(255,0,0);\n Color3.fromRGB(0,255,0);\n Color3.fromRGB(0,0,255);\n}\nmyStore.color = 1\n\nFrame \"mainFrame\" {\n Size = UDim2.fromOffset(200,200);\n -- colors \uc5d0\uc11c \uc778\ub371\uc2f1\ud574 \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4\n BackgroundColor3 = myStore \"color\":With(colors);\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- \uc778\ub371\uc2a4\ub97c \uc21c\ud68c\ud569\ub2c8\ub2e4\nwhile task.wait(1) do\n myStore.color = (i-1)%(#colors)+2\nend\n \uc8fc\uc758 \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
:Tween(options:TweenOptions)->register
\ud2b8\uc708\uc744 \uc774\uc6a9\ud574 \ubcc0\uacbd\uc0ac\ud56d\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4(\ucc98\uc74c \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc74c) \uc635\uc158\uc740 Tween \ubb38\uc11c\uc5d0 \ub098\uc640\uc788\ub294 \uc635\uc158\uacfc \uac19\uc2b5\ub2c8\ub2e4.
\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \ud55c\uaebc\ubc88\uc5d0 \uc774\ub3d9 -- Tween \uc635\uc158\uc744 \ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nmyStore \"size\":Tween{ Time = 2 }\n \ud504\ub808\uc784\uc744 \ud55c\uaebc\ubc88\uc5d0 \uc6c0\uc9c1\uc785\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\nmyStore.pos = UDim2.fromOffset(50,0)\nStyle \"TweenFrame\" {\n Size = UDim2.fromOffset(50,50);\n BackgroundColor3 = Color3.fromRGB(255,100,255);\n}\n\nFrame \"mainFrame\" {\n BackgroundColor3 = Color3.fromRGB(255,255,255);\n Size = UDim2.fromOffset(500,500);\n Frame \"TweenFrame\" {\n Position = myStore \"pos\":Tween{Time = 2};\n };\n Frame \"TweenFrame\" {\n Position = myStore \"pos\"\n :Add(UDim2.fromOffset(0,100))\n :Tween{Time = 2};\n };\n Frame \"TweenFrame\" {\n Position = myStore \"pos\"\n :Add(UDim2.fromOffset(0,200))\n :Tween{Time = 2};\n };\n Frame \"TweenFrame\" {\n Position = myStore \"pos\"\n :Add(UDim2.fromOffset(0,300))\n :Tween{Time = 2};\n }\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nlocal on = false\nwhile true do\n on = not on\n myStore.pos = on and UDim2.fromOffset(400,0) or UDim2.fromOffset(50,0)\n task.wait(1.5) -- \ud2b8\uc708\uc740 \ub36e\uc5b4 \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n -- \ub530\ub77c\uc11c 2 \ucd08\uc778 \uae38\uc774\ubcf4\ub2e4 \ub354 \ube68\ub9ac \ubc14\uafd4\ub3c4 \uc624\ub958\uac00 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\nend\n \uc8fc\uc758 \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
:Default(value:any)->register
\uae30\ubcf8\uac12\uc744 \uc815\ud569\ub2c8\ub2e4. \ub9cc\uc57d \uac12\uc774 nil \uc778 \uacbd\uc6b0 \uc774 \uac12\uc744 \uc0ac\uc6a9\ud558\uac8c \ub429\ub2c8\ub2e4. Add \ub098 With \ub4f1 \ub2e4\ub978\uac83\uc5d0 \uc601\ud5a5\ubc1b\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nFrame \"mainFrame\" {\n Size = UDim2.fromOffset(200,200);\n -- color \uac12\uc774 \uc5c6\uc73c\ubbc0\ub85c Default \uc548\uc758 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.\n BackgroundColor3 = myStore \"color\"\n :Default(Color3.fromRGB(255,0,0));\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\ntask.wait(5)\nmyStore.color = Color3.fromRGB(0,255,0)\n \uc8fc\uc758 \ucc98\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \ub54c\uc5d0\ub9cc \uc774 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4. :Register(<INPUT>(store:valueStore, newValue:any, key:string)->())->INPUT
\ub808\uc9c0\uc2a4\ud130\uc5d0 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4. \uac12\uc774 \ubcc0\uacbd\ub418\uba74 \ud568\uc218\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4
newValue \uc5d0\ub294 :Add, :With, :Tween, :Default \uac00 \ub530\ub85c \uacc4\uc0b0\ub418\uc9c0 \uc54a\uc73c\uba70, \uc124\uc815\ub41c \uac12\uc744 \uc544\ubb34 \uac00\uacf5 \uc5c6\uc774 \uc81c\uacf5\ud569\ub2c8\ub2e4
\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \uc5ec\ub7ec \ubcc0\uacbd\uc0ac\ud56d \ucd94\uc801 myStore.test = 1\n-- \ubc18\ud658 \uac12\uc740 \uc785\ub825\uc73c\ub85c \ub123\uc740 \ud568\uc218\uc785\ub2c8\ub2e4. !\uaf2d \uc800\uc7a5\ud574\uc57c\ud569\ub2c8\ub2e4\n-- :Register \ub294 \ud568\uc218\uac00 \uc0ac\ub77c\uc9c0\uc9c0 \uc54a\ub3c4\ub85d \uac12\uc744 \uc720\uc9c0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\n-- \ub9cc\uc57d \ubc84\ub9b4 \uacbd\uc6b0 \uc77c\uc815 \uc2dc\uac04 \ub4a4 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nlocal func = myStore \"test\":Register(function(_,newValue)\n -- \uac12 \ubcc0\uacbd\uc2dc \ucd9c\ub825\ub429\ub2c8\ub2e4\n print(newValue)\nend)\nmyStore.test = 2\n myStore.test1, myStore.test2 \uac00 \ubcc0\ud654\ud558\uba74 print \ud568\uc218\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.
local Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\n\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.test1 = 1\nmyStore.test2 = \"Hello\"\n\nlocal func = myStore \"test1,test2\":Register(function()\n print(myStore.test1,myStore.test2)\nend)\n\nmyStore.test1 = 2\n \uc8fc\uc758 Register \uc548\uc5d0 \ub4e4\uc5b4\uac04 \ud568\uc218\ub294 GC \uc548\uc815\uc131\uc744 \uc704\ud574\uc11c \uc57d\ud55c \ucc38\uc870\ub85c \uc800\uc7a5\ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c \ud568\uc218\ub97c \uc800\uc7a5\ud574\uc57c\ud569\ub2c8\ub2e4.
"},{"location":"tutorial/9_lang/","title":"Lang - \uc5b8\uc5b4\uad00\ub9ac","text":"\uc77d\uae30 \uc804... \ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Lang \uae30\ub2a5\uc774 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Lang \uc740 \uacf5\uc720\ub429\ub2c8\ub2e4
"},{"location":"tutorial/9_lang/#_1","title":"\uc5b8\uc5b4\uad00\ub9ac","text":"Quad \uc5d0\ub294 \uadc0\ucc2e\uc740 \uc5b8\uc5b4\uad00\ub9ac\ub97c \uc790\ub3d9\uc73c\ub85c \ud574\uc8fc\ub294 \uae30\ub2a5\uc774 \ub0b4\uc7a5\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 register \uc640 \uc5f0\ub3d9\ud574 \uc801\uc740 \uc904\uc758 \ucf54\ub4dc\ub85c \ubcc0\ud558\ub294 \ud14d\uc2a4\ud2b8\ub3c4 \uc5b8\uc5b4\uc5d0 \ub9de\uac8c \ucd9c\ub825\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
\ubc88\uc5ed \ud14c\uc774\ube14\uc740 Lang.New(LangName:string,{ [Locale]: string|(options)->string }) \ub2e4\uc74c\uc744 \uc774\uc6a9\ud574 \ub9cc\ub4e4 \uc218 \uc788\uc73c\uba70. Lang(LangName:string)(options) \ub85c UI \uc5d0 \uc801\uc6a9\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4.
\uc6a9\ubc95\uc608\uc81c - \ub2e4\uc911\uc5b8\uc5b4 \uce74\uc6b4\ud130 -- \uc790\uc138\ud55c \uc124\uba85\uc740 \uc608\uc81c\ub97c \ucc38\uace0\ud558\uc138\uc694\nLang.New(\"Test\",{\n [Lang.Locales.Korean] = \"{won} \uc6d0\";\n [Lang.Locales.Default] = \"{won} Won\";\n})\nTextLabel {\n Lang \"Test\" {\n won = 100;\n };\n}\n 1\ucd08\uac00 \uc9c0\ub0a0 \ub54c \ub9c8\ub2e4 \uce74\uc6b4\ud2b8\ub97c \uc99d\uac00\ud569\ub2c8\ub2e4. \uc601\uc5b4 \uc0ac\uc6a9\uc790\uc5d0\uac90 \uc601\uc5b4\ub97c, \ud55c\uad6d\uc5b4 \uc0ac\uc6a9\uc790\uc5d0\uac90 \ud55c\uad6d\uc5b4\ub97c \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Mount = Quad.Mount\nlocal Event = Quad.Event\nlocal Lang = Quad.Lang\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myStore = Store.GetStore(\"myStore\")\nmyStore.count = 0\n\nLang.New(\"TimePassed\",{\n [Lang.Locales.Korean] = \"{count}\ucd08 \uc9c0\ub0ac\uc5b4\uc694\";\n [Lang.Locales.Default] = function (options)\n -- \ud568\uc218 \ub610\ud55c \ub4f1\ub85d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n if options.count > 1 then\n return (\"%d seconds passed\"):format(options.count)\n else\n return (\"%d second passed\"):format(options.count)\n end\n end;\n})\n\nTextButton \"mainButton\" {\n Size = UDim2.fromOffset(100,100);\n Text = Lang \"TimePassed\" {\n -- count = 1 \uc77c\ubc18\uc801\uc778 \uac12\ub3c4 \uc0ac\uc6a9\uac00\ub2a5\ud569\ub2c8\ub2e4\n count = myStore \"count\";\n };\n [Event \"MouseButton1Click\"] = function()\n -- \ud074\ub9ad\uc2dc \uc5b8\uc5b4\uac00 \ubcc0\uacbd\ub429\ub2c8\ub2e4\n if Lang.CurrentLocale == Lang.Locales.Default then\n Lang.CurrentLocale = Lang.Locales.Korean\n else\n Lang.CurrentLocale = Lang.Locales.Default\n end\n end\n}\nMount(ScreenGUIk,Store.GetObject(\"mainButton\"))\n\nwhile task.wait(1) do\n myStore.count = myStore.count + 1\nend\n "},{"location":"tutorial/9_lang/#locale","title":"Locale \ubaa9\ub85d","text":"\ub85c\ucf00\uc77c \uac12\ub4e4\uc740 Lang.Locales\uc5d0\uc11c \uac00\uc838\uc62c \uc218 \uc788\uc73c\uba70, \uc0ac\uc6a9\uac00\ub2a5\ud55c \ub85c\ucf00\uc77c \ubaa9\ub85d\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
Default (default) English (en_us) Spanish (es_es) French (fr_fr) Indonesian (id_id) Italian (it_it) Japanese (ja_jp) Korean (ko_kr) Russian (ru_ru) Thai (th_th) Turkish (tr_tr) Vietnamese (vi_vn) Portuguese (pt_br) German (de_de) ChineseSimplified (zh_cn) ChineseTraditional (zh_tw) Bulgarian (bg_bg) Bengali (bn_bd) Czech (cs_cz) Danish (da_dk) Greek (el_gr) Estonian (et_ee) Finnish (fi_fi) Hindi (hi_in) Croatian (hr_hr) Hungarian (hu_hu) Georgian (ka_ge) Kazakh (kk_kz) Khmer (km_kh) Lithuanian (lt_lt) Latvian (lv_lv) Malay (ms_my) Burmese (my_mm) Bokmal (nb_no) Dutch (nl_nl) Filipino (fil_ph) Polish (pl_pl) Romanian (ro_ro) Ukrainian (uk_ua) Sinhala (si_lk) Slovak (sk_sk) Slovenian (sl_sl) Albanian (sq_al) Bosnian (bs_ba) Serbian (sr_rs) Swedish (sv_se) Arabic (ar_001)
"}]}
\ No newline at end of file
diff --git a/docs/kr/sitemap.xml b/docs/kr/sitemap.xml
index 72f8dc3..c85afd0 100644
--- a/docs/kr/sitemap.xml
+++ b/docs/kr/sitemap.xml
@@ -20,11 +20,26 @@
2023-02-21
daily
+
+ https://quad.qwreey.kr/kr/include/bindable/
+ 2023-02-21
+ daily
+
+
+ https://quad.qwreey.kr/kr/include/connection/
+ 2023-02-21
+ daily
+
https://quad.qwreey.kr/kr/include/direction/
2023-02-21
daily
+
+ https://quad.qwreey.kr/kr/include/disconnecter/
+ 2023-02-21
+ daily
+
https://quad.qwreey.kr/kr/include/easings/
2023-02-21
@@ -35,6 +50,11 @@
2023-02-21
daily
+
+ https://quad.qwreey.kr/kr/include/extend/
+ 2023-02-21
+ daily
+
https://quad.qwreey.kr/kr/include/locales/
2023-02-21
diff --git a/docs/kr/sitemap.xml.gz b/docs/kr/sitemap.xml.gz
index a227964e27ef6e12a73ad532684bb518b227ae92..35dbc08955a65189230ec474bbf46621b7aefacf 100644
GIT binary patch
literal 452
zcmV;#0XzO5iwFo8-t=Pv|8r?{Wo=<_E_iKh0M*yMZi6ro0N}k(5wQmo(!W%MEN!Ps
z?aHGXKnO{Tcq}7mdVOIlOuE
zt^rRyXQziM^d#@ukvahT+6;>g>yb%)1CN)mEDq2ozDtgW4fwD%0p7TASpL>QcnMm@
zg$A|cyjF&_ZI(#XmF2FSNxsFdtc`P70lki85o_nQMCy6&y-&s)
uIc{`V8*k-dGUsf(liVxd6ZKwlE`m?Yg)|}M{}aax0_8t5ji@Lw761UFbk&gn
literal 426
zcmV;b0agAViwFpf#q?tW|8r?{Wo=<_E_iKh0M*ycPJ}QJ0N}e%LAWnvS^vYb7xiSK
z2R%0xX4z_K+0L-Y+gre_d-Y&4HY7khnS5#5GUS`j#zY73sGVKM%Os5>u%)ZCt=IAE
z%fsS2-V|qf=M4fyA=u(N-VwF8LiBx~peATki;45Kz;YK}P<(faG`We3vnaGN!TdC}
z+_6snk2>BgpPGnq-9Cfua2K>O0W^@S_fg?@Z(sUJwN_!|NYyi$kP#E?kvL+tD
z5^G_IQU+KP8`m+PMECX{w#%bN;;bA;p1o_q)4F
z|KTtnq4#_bbPrqbp$r7xxM^Abe7*5MXc>RTsUzpLGOTUORHCjecjZ#TCxNYaE2VB)
z=ZQ5klT$^++PIQ6(9={Fv38zIq`?4d
-
+
콘텐츠로 이동
@@ -596,10 +596,68 @@
+
+ Signal
+
+
+
Signal
+
+
+
+
+
+
+
+
+
+
+
+ 목차
+
+
+
+
+
@@ -688,8 +746,148 @@
-Signal
-Quad 에는 편의상의 이유로
+Signal - 이벤트 생성과 연결
+
+읽기 전...
+모듈 설정시 . Init () 처럼 QuadId 란을 비워두는 경우 Bindable, Disconnecter 기능이 코드를 넘어 공유되지 않습니다
+하지만 . Init ( "Project1" ) 처럼 아이디를 부여하는 경우 다른 모듈, 로컬스크립트가 접근하더라도 같은 QuadId 를 가졌다면 Bindable, Disconnecter 는 공유됩니다
+
+Quad 에는 편의상의 이유로 로블록스의 RBXScriptSignal 의 유사품과, 한번에 시그널을 끊어주는 Disconnecter 를 제공합니다.
+이는 내부적으로 Extend 의 GetPropertyChangedSignal 같은 곳에서 사용되기도 합니다.
+Bindable
+Bindable 은 RBXScriptSignal 과 유사한 객체입니다. Signal . Bindable . New ( id : string? ) 으로 생성할 수 있습니다.
+로블록스의 기본 BindableEvent 와는 다르게 :Fire 가 한곳에 합쳐져 있습니다.
+
+Note
+만약 id 를 지정한 경우, 같은 id 를 가진 Bindable 이 있으면 이전것을 반환합니다.
+
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28 local Quad = require ( path . to . module ). Init ()
+local Signal = Quad . Signal
+
+local mySignal = Signal . Bindable . New ()
+
+local connection = mySignal : Connect ( function ( v )
+ print ( v )
+end )
+mySignal : Fire ( "이 메시지는 출력되어야 합니다." )
+connection : Disconnect ()
+mySignal : Fire ( "이 메시지는 출력되면 안됩니다." )
+
+task . spawn ( function ()
+ task . wait ( 5 )
+ mySignal : Fire ( "이 메시지는 지연된 후 출력되어야 합니다." )
+end )
+print ( mySignal : Wait ())
+
+mySignal : Once ( function ( v )
+ print ( v )
+end )
+mySignal : Fire ( "이 메시지는 출력되어야 합니다." )
+mySignal : Fire ( "이 메시지는 출력되면 안됩니다." )
+
+mySignal : Once ( function ( v )
+ print ( v )
+end ): Disconnect ()
+mySignal : Fire ( "이 메시지는 출력되면 안됩니다." )
+
+Bindable 메소드
+Bindable 에는 다음과 같은 메소드들이 제공됩니다.
+: Fire (... any )
+
+등록된 연결들을 실행하고, Wait 을 풀어줍니다.
+
+
+: Wait () -> (... any )
+
+Fire 가 호출될 때 까지 기다립니다. Fire 에 사용된 값이 반환됩니다.
+
+
+: Connect ((... any ) -> ()) -> Connection
+
+Fire 가 호출 될 때 함수가 실행되도록 만듭니다. Fire 에 사용된 값이 호출 인자로 사용됩니다. 연결을 끊을 수 있도록 Connection 이 제공됩니다.
+
+
+: Once ((... any ) -> ()) -> Connection
+
+Connect 와 유사하지만, Fire 가 한번 호출된 뒤 연결이 끊어집니다/
+
+
+: CheckConnected ( func ) -> boolean
+
+함수가 이미 등록되어 있는지 여부를 반환합니다.
+
+
+: DisconnectAll ()
+
+모든 연결을 끊습니다. Wait 으로 기다리고 있는 곳에는 nil 을 반환합니다.
+
+
+: Destroy ()
+
+: DisconnectAll () 를 수행한 후, 객체를 더이상 사용할 수 없도록 만듭니다.
+id 가 등록되어 있는경우 저장소에서 파기하게 됩니다.
+
+Connection 메소드
+Bindable:Connect 와 Bindable:Once 는 Connection 을 반환합니다. Connection 에는 다음과 같은 메소드들이 제공됩니다.
+: Disconnect ()
+
+연결을 끊습니다. Fire 가 호출되더라도 Connect 혹은 Once 에 사용된 함수가 실행되지 않습니다.
+
+
+: Destroy ()
+
+: Disconnect () 의 별칭입니다.
+
+
+Disconnecter
+Disconnecter 는 일종의 Maid 모듈과 비슷한 객체입니다. 이 객체에는 Connection (로블록스, Quad 모두 호환) 을 추가할 수 있으며, 나중에 추가된 Connection 을 한꺼번에 Disconnect 할 수 있습니다. Signal . Disconnecter . New ( id : string? ) 으로 생성할 수 있습니다.
+
+Note
+만약 id 를 지정한 경우, 같은 id 를 가진 Bindable 이 있으면 이전것을 반환합니다.
+
+: Add ( connection : Connection | RBXScriptConnection )
+
+connection을 리스트에 추가합니다. 나중에 :Disconnect를 호출하면 추가된 연결이 파기됩니다.
+
+
+: Disconnect ()
+
+추가된 모든 연결에 Disconnect() 를 수행합니다. 이 호출 후에 추가된 연결은 모두 사라지며. 이 요청 후에도 다시 :Add 를 사용할 수 있습니다
+Disconnecter 를 완전히 사용하지 못하도록 하려면 :Destroy 를 호출하세요
+
+
+: Destroy ()
+
+: Disconnect () 를 수행한 후, 객체를 더이상 사용할 수 없도록 만듭니다.
+id 가 등록되어 있는경우 저장소에서 파기하게 됩니다.
+
diff --git a/docs/kr/tutorial/11_extend/index.html b/docs/kr/tutorial/11_extend/index.html
index adc7099..33c66cf 100644
--- a/docs/kr/tutorial/11_extend/index.html
+++ b/docs/kr/tutorial/11_extend/index.html
@@ -68,6 +68,11 @@
@@ -602,11 +607,44 @@
+
+
+
+
+ Extend
+
+
Extend
+
+
+
+
+
+
+
+
+
+
+
+ 목차
+
+
+
+
+
@@ -681,9 +719,283 @@
-
Extend
+
Extend - 확장과 재사용
+
나만의 클래스를 만들어보자
+
Quad 에서는 로블록스의 Frame 이나 TextButton 같은 기본 오브젝트만 만들 수 있는것이 아닙니다. Quad 는 자신만의 버튼, 혹은 여러 컴포넌트들을 추상적으로 만들고. 다시 활용할 수 있도록 Extend 를 지원합니다.
+
Extend 는 Register 와 더불어 Quad 의 가장 중요한 기능으로써, 다음과 같은 장점을 지닙니다.
+
+
+재사용 가능합니다. 나만의 버튼을 만들고, 고치고 싶은 마음이 생겨 고치면 자동으로 사용된 곳들이 업데이트됩니다.
+긴 코드를 나누어 코드마다 확실한 목적을 부여해 더 명확한 코드 작성이 가능해집니다.
+자신만의 프로퍼티를 만들거나 완전히 원하는대로 오브젝트를 커스터마이징 할 수 있습니다.
+함수나 생성기를 직접 만드는 것 보다 일관된 방법을 제공합니다.
+
+
+
Extend 객체는 다음과 같이 생성합니다.
+
local Quad = require ( path . to . module ). Init ()
+local Class = Quad . Class
+-- extend 객체를 만듭니다
+local myClass = Class . Extend ()
+
+일반적으로 Extend 는 한 모듈에 하나씩 넣습니다.
+
다음과 같은 코드 구조를 만들어보세요.
+
- ScreenGUI
+ |-- localscript
+ |-- myClass (ModuleScript)
+
+
localscript localscript.myClass
+
+
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39 local ScreenGUI = script . Parent
+local Quad = require ( path . to . module ). Init ()
+local Mount = Quad . Mount
+local Class = Quad . Class
+local Store = Quad . Store
+local myStore = Store . GetStore ( "myStore" )
+myStore . bgColor = Color3 . fromRGB ( 0 , 0 , 0 )
+
+-- Class(require(script.myClass)) 와 같습니다.
+-- 줄여서 Class(script.myClass) 로 쓸 수도 있습니다.
+local myClass = Class ( script . myClass )
+
+-- 프레임에 넣거나 하여도 무방합니다
+-- 일반 오브젝트와 똑같이 id 를 넣고 GetObject 로
+-- 가져올 수도 있습니다
+local main = myClass "main" {
+ Testing = 1 ;
+ Text = "Test" ;
+ -- 레지스터 값을 넘겨줄 수도 있습니다.
+ -- 받는쪽도 레지스터인 경우 값이 연동됩니다.
+ BackgroundColor3 = myStore "bgColor" ;
+}
+
+Mount ( ScreenGUI , main )
+print ( Store . GetObject ( "main" ) == main ) -- true
+
+-- 이 값을 바꾸면 연동된 BackgroundColor3 도 바뀔것입니다
+myStore . bgColor = Color3 . fromRGB ( 255 , 255 , 255 )
+
+-- 값 변경됨을 연결하기
+main
+ : GetPropertyChangedSignal ( "AbsolutePosition" )
+ : Connect ( function ()
+ print ( "AbsolutePosition" , main . AbsolutePosition )
+ end )
+
+-- main:Update()
+-- 강제로 다시 Render 를 실행하도록 만듭니다.
+
+
+
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80 local Quad = require ( path . to . module ). Init ()
+local Class = Quad . Class
+local Event = Quad . Event
+
+local TextLabel = Class "TextLabel"
+
+local myClass = Class . Extend ()
+
+-- Init 에는 프로퍼티 리스트가 제공됩니다.
+-- Init 는 없더라도 무방합니다.
+function myClass : Init ( props )
+ -- 생성된 오브젝트에 프라이빗 값을 만듭니다.
+ -- 이름 앞에 _ 가 붇으면 외부에서 사용되는 목적이 아닌
+ -- 내부에서 사용되는 목적으로만 사용할 수 있습니다
+ -- 이 경우 안전성을 위해 register 를 사용할 수
+ -- 없습니다.
+ self . _testValue = 2
+
+ -- 프로퍼티의 기본값을 정해줄 수 있습니다.
+ -- 생성 시 값이 누락된 경우 사용할 값을 정해줄 수 있습니다
+ -- 키, 값 으로 구성합니다
+ props : Default ( "Text" , "Testing Label" )
+end
+
+-- myClass 가 진짜 그려지는 부분입니다.
+-- Render 도 Init 처럼 프로퍼티 리스트가 제공됩니다.
+function myClass : Init ( props )
+ return TextLabel {
+ -- self 에 _label 로 이 TextLabel 을 넣습니다.
+ -- 자식 오브젝트에도 사용할 수 있는 문법입니다.
+ self "_label" ;
+
+ -- GetPropertyChangedSignal 가 작동할 수 있도록
+ -- 프로퍼티 변경 이벤트를 연결해줍니다
+ -- 이 또한 자식 오브젝트에도 사용할 수 있는 문법입니다.
+ [ Event . Prop "AbsolutePosition" ] = self "AbsolutePosition" ;
+ -- 마우스 클릭같은 다른 이벤트를 GetPropertyChangedSignal 에
+ -- 연결하려면 :EmitPropertyChangedSignal() 를 호출해주면 됩니다.
+ [ Event "MouseEnter" ] = function ( this , x , y )
+ -- 키, 값이 들어갑니다. 값이 없으면 self[key] 로 대신합니다.
+ self : EmitPropertyChangedSignal ( "Testing2" , 1 )
+ end ;
+
+ -- 받은 레지스터를 연동합니다.
+ -- 만약 props.BackgroundColor3 만 사용하면
+ -- 처음에만 레지스터에서 값을 읽어옵니다.
+ -- 따라서 값을 변경해도 변경사항이 적용되지 않습니다.
+ BackgroundColor3 = props "BackgroundColor3" ;
+
+ -- 입력 값과 상관없이 레지스터를 쓸 수 있습니다.
+ -- 이 경우 main.Text = "New" 처럼 직접 변경하면
+ -- 그 변경이 적용됩니다.
+ Text = props "Text" ;
+
+ -- ... 자식을 넣어도 무방합니다.
+ }
+end
+
+-- function myClass:Unload(object)
+-- :Destroy 가 호출될 때 사용됩니다. 따로 선언하지 않아도
+-- 연결을 모두 끊고 없에주지만 필요한 경우 직접 없에줄 수 있습니다
+-- object 는 :Render 가 반환한 값입니다
+
+-- AbsolutePosition 값을 반환할 수 있도록 만듭니다
+function myClass . Getter . AbsolutePosition ( self )
+ return self . _label . AbsolutePosition
+end
+
+-- AbsolutePosition 값을 설정할 수 없도록 만듭니다
+function myClass . Setter . AbsolutePosition ( self , newValue )
+ -- 필요한 경우 값을 설정하도록 만들 수 있습니다
+ error ( "AbsolutePosition 값은 설정할 수 없습니다" )
+end
+
+-- main.Testing = 2 다음과 같이 값을 변경하면 오브젝트가
+-- 완전히 다시 그려집니다. 즉 업데이트 트리거로 사용합니다.
+myClass . UpdateTriggers . Testing = true
+
+-- 만든 클래스를 반환해줍시다.
+return myClass
+
+
+
+
diff --git a/docs/kr/tutorial/2_mount/index.html b/docs/kr/tutorial/2_mount/index.html
index 65508f4..f8a8eb4 100644
--- a/docs/kr/tutorial/2_mount/index.html
+++ b/docs/kr/tutorial/2_mount/index.html
@@ -728,7 +728,7 @@
Mount - 화면에 UI 표현
화면에 UI 를 표시하기
-
일반적으로 Quad 모듈에서 모든 Parent 처리는 Mount 를 이용합니다. Mount ( to : any , ...item : any? ) -> mounts 함수를 이용하면 다루는 오브젝트가 로블록스 Instance 인지, 향후 소개될 Quad 확장 클래스인지 상관없이 알아서 Parent 가 처리됩니다.
+
Quad 모듈에서 모든 Parent 처리는 Mount 를 이용합니다. Mount ( to : any , ...item : any? ) -> mounts 함수를 이용하면 다루는 오브젝트가 로블록스 Instance 인지, 향후 소개될 Quad 확장 클래스인지 상관없이 알아서 Parent 가 처리됩니다.
1
2
3
diff --git a/docs/kr/tutorial/3_getObject/index.html b/docs/kr/tutorial/3_getObject/index.html
index 8f96324..ec4332f 100644
--- a/docs/kr/tutorial/3_getObject/index.html
+++ b/docs/kr/tutorial/3_getObject/index.html
@@ -906,15 +906,18 @@
일반적인 반복입니다. for 를 사용하는것과 효과가 같으나 함수를 이용합니다
+
: EachAsync (( item : any , index : number ) -> ())
반환을 기다리지 않고 바로바로 다음 아이템으로 넘어갑니다.
코루틴이 이용됩니다. wrap() 코루틴을 모르거나, 필요성이 없는경우 일반적으로 : Each 를 사용해도 됩니다
+
: IsEmpty ()
이 ObjectList 가 비어있는지 여부를 반환합니다.
+
: Remove ( indexOrItem : number | any )
objectList 에서 해당하는 오브젝트를 제거합니다.
@@ -923,18 +926,24 @@
고급 ID 사용하기
id 기능을 조금더 고급적인 방법으로 사용할 수도 있습니다.
-=== 용법
+용법 예제
+
+
```lua
-Frame "a,b" {
-
-}
-```
+5
+6 -- 두 아이디를 가진 프레임을 생성합니다
+Frame "a,b" {}
+-- a 를 가진것과, a 와 b 를 가진것을 가져옵니다
+Store . GetObjects ( "a,a&b" ): Each ( function ( item )
+ print ( item )
+end )
-
=== 예제
+
+
+
좀더 직관적인 확인을 위해서 작동시켜보세요.
1
2
3
@@ -970,51 +979,46 @@ Frame "a,b" {
33
34
35
-36
-37
-38
-39
-40 좀더 직관적인 확인을 위해서 작동시켜보세요.
+36 local ScreenGUI = script . Parent
+local Quad = require ( path . to . module ). Init ()
+local Class = Quad . Mount
+local Mount = Quad . Store
+local Store = Quad . Class
-```lua
-local ScreenGUI = script.Parent
-local Quad = require(path.to.module).Init()
-local Class = Quad.Mount
-local Mount = Quad.Store
-local Store = Quad.Class
+local Frame = Class "Frame"
-local Frame = Class "Frame"
+--다음과 같이 a 와 b 모두 가진 프레임을 생성할 수도 있습니다.
+Frame "a,b" {
+ Name = "main" ;
+ Frame "a" {
+ Name = "Child1" ;
+ };
+ Frame "b" {
+ Name = "Child2" ;
+ };
+}
---다음과 같이 a 와 b 모두 가진 프레임을 생성할 수도 있습니다.
-Frame "a,b" {
- Name = "main";
- Frame "a" {
- Name = "Child1";
- };
- Frame "b" {
- Name = "Child2";
- };
-}
+-- 다음과 같이 a 와 b 둘다 선택할 수 있습니다
+Store . GetObjects ( "a,b" ): Each ( function ( item , index )
+ print ( item . Name )
+end )
+print ( "----" )
--- 다음과 같이 a 와 b 둘다 선택할 수 있습니다
-Store.GetObjects("a,b"):Each(function(item, index)
- print(item.Name)
-end)
-print("----")
+-- 다음과 같이 a 와 b 를 동시에 가진 것을 선택할 수 있습니다
+Store . GetObjects ( "a&b" ): Each ( function ( item , index )
+ print ( item . Name )
+end )
+print ( "----" )
--- 다음과 같이 a 와 b 를 동시에 가진 것을 선택할 수 있습니다
-Store.GetObjects("a&b"):Each(function(item, index)
- print(item.Name)
-end)
-print("----")
-
--- 다음과 같이 a와b 를 동시에 가진것과, b 를 가진것을 선택
--- 할 수 있습니다
-Store.GetObjects("a&b,b"):Each(function(item, index)
- print(item.Name)
-end)
-```
+-- 다음과 같이 a와b 를 동시에 가진것과, b 를 가진것을 선택
+-- 할 수 있습니다
+Store . GetObjects ( "a&b,b" ): Each ( function ( item , index )
+ print ( item . Name )
+end )
+
+
+
또는(or) 연산 ,
그리고(and) 연산 &
@@ -1062,7 +1066,7 @@ end)
Store . GetObjects ( "a" ): Remove ( Store . GetObject ( "testing" ))
Store . AddObject ( ids : string , item : any ) 를 이용해 item 에 아이디를 추가하고
-: Remove ( item : any ) 를 이용해 item 에 아이디를 제거합니다
+
: Remove ( item : any ) 를 이용해 item 에 아이디를 제거합니다
diff --git a/docs/kr/tutorial/4_style/index.html b/docs/kr/tutorial/4_style/index.html
index fa878ec..966f129 100644
--- a/docs/kr/tutorial/4_style/index.html
+++ b/docs/kr/tutorial/4_style/index.html
@@ -69,7 +69,7 @@
-
+
콘텐츠로 이동
@@ -512,10 +512,48 @@
+
+ Style
+
+
+
Style
+
+
+
+
+
+
+
+
+
+
+
+ 목차
+
+
+
+
+
@@ -688,13 +726,14 @@
-
반복되는 속성값을 줄이기
+
Style - 속성 값 번들링
읽기 전...
모듈 설정시 . Init () 처럼 QuadId 란을 비워두는 경우 Style 기능이 코드를 넘어 공유되지 않습니다
하지만 . Init ( "Project1" ) 처럼 아이디를 부여하는 경우 다른 모듈, 로컬스크립트가 접근하더라도 같은 QuadId 를 가졌다면 Style 는 공유됩니다
+
반복되는 속성값을 줄이기
Quad 에서는 반복적인 속성들을 줄여 쓸 수 있도록 Style 을 제공합니다.
1
2
@@ -771,7 +810,9 @@
Mount ( ScreenGUI , Store . GetObject ( "mainFrame" ))
Style 을 사용하면 많은 양의 속성을 하나에 변수로 집어넣을 수 있습니다. Style 을 사용해서 많은 양의 코드를 줄여보세요
-
또, Style 에는 타겟 id를 지정해줄 수 있습니다
+
+
ID 로 타겟을 지정하기
+
Style 에는 타겟 id를 지정해줄 수 있습니다
1
2
3
@@ -820,7 +861,7 @@
Mount ( ScreenGUI , Store . GetObject ( "mainFrame" ))
-
Style ( id : string ){ any } 를 이용해 스타일을 선언해주면 나중에 해당 id를 가진 오브젝트 생성시 해당 스타일이 적용됩니다.
+
Style ( id : string ){ any } 를 이용해 스타일을 선언해주면 나중에 해당 id를 가진 오브젝트 생성시 해당 스타일이 적용됩니다.
diff --git a/docs/kr/tutorial/8_register/index.html b/docs/kr/tutorial/8_register/index.html
index cadc3ae..53122ec 100644
--- a/docs/kr/tutorial/8_register/index.html
+++ b/docs/kr/tutorial/8_register/index.html
@@ -847,7 +847,6 @@
값에 더하기를 취합니다. 음수형태가 제공되는 경우 빼기 처럼 작동합니다.
number, Udim, UDim2, Color3, Vector2 등 더할 수 있는 모든것을 사용할 수 있습니다
-주의 : 구조의 복잡성을 피하고자, 여러번 호출시 가장 마지막 호출된 것만 사용됩니다
1
2
3
@@ -890,6 +889,10 @@
task . wait ( 2 )
end
+
+주의
+구조의 복잡성을 피하고자, 여러번 호출시 가장 마지막 호출된 것만 사용됩니다
+
: With (( store : valueStore , newValue : any , key : string ) -> ()) -> register
diff --git a/docs/kr/tutorial/9_lang/index.html b/docs/kr/tutorial/9_lang/index.html
index 9ce9e3a..af247aa 100644
--- a/docs/kr/tutorial/9_lang/index.html
+++ b/docs/kr/tutorial/9_lang/index.html
@@ -69,7 +69,7 @@
-
+
콘텐츠로 이동
@@ -607,7 +607,7 @@
-
+
언어관리
@@ -726,16 +726,43 @@
-언어관리
+Lang - 언어관리
읽기 전...
모듈 설정시 . Init () 처럼 QuadId 란을 비워두는 경우 Lang 기능이 코드를 넘어 공유되지 않습니다
하지만 . Init ( "Project1" ) 처럼 아이디를 부여하는 경우 다른 모듈, 로컬스크립트가 접근하더라도 같은 QuadId 를 가졌다면 Lang 은 공유됩니다
-언어관리
-Quad 에는 귀찮은 언어관리를 자동으로 해주는 기능이 내장되어 있습니다.
-이 기능은 register 와 연동해 적은 줄의 코드로 변하는 텍스트도 언어에 맞게 출력되도록 만들 수 있습니다.
+언어관리
+Quad 에는 귀찮은 언어관리를 자동으로 해주는 기능이 내장되어 있습니다. 이 기능은 register 와 연동해 적은 줄의 코드로 변하는 텍스트도 언어에 맞게 출력되도록 만들 수 있습니다.
+번역 테이블은 Lang . New ( LangName : string ,{ [ Locale ] : string | ( options ) -> string }) 다음을 이용해 만들 수 있으며.
+Lang(LangName:string)(options) 로 UI 에 적용시킬 수 있습니다.
+용법 예제 - 다중언어 카운터
+
+
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10 -- 자세한 설명은 예제를 참고하세요
+Lang . New ( "Test" ,{
+ [ Lang . Locales . Korean ] = "{won} 원" ;
+ [ Lang . Locales . Default ] = "{won} Won" ;
+})
+TextLabel {
+ Lang "Test" {
+ won = 100 ;
+ };
+}
+
+
+
+
1초가 지날 때 마다 카운트를 증가합니다. 영어 사용자에겐 영어를, 한국어 사용자에겐 한국어를 보여줍니다.
1
2
3
@@ -826,6 +853,9 @@
myStore . count = myStore . count + 1
end
+
+
+
Locale 목록
로케일 값들은 Lang . Locales 에서 가져올 수 있으며, 사용가능한 로케일 목록은 다음과 같습니다.
diff --git a/md/kr/include/bindable.md b/md/kr/include/bindable.md
new file mode 100644
index 0000000..f9d2050
--- /dev/null
+++ b/md/kr/include/bindable.md
@@ -0,0 +1,34 @@
+
+`#!ts :Fire(...any)`
+> 등록된 연결들을 실행하고, `Wait` 을 풀어줍니다.
+
+---
+
+`#!ts :Wait()->(...any)`
+> `Fire` 가 호출될 때 까지 기다립니다. `Fire` 에 사용된 값이 반환됩니다.
+
+---
+
+`#!ts :Connect((...any)->())->Connection`
+> `Fire` 가 호출 될 때 함수가 실행되도록 만듭니다. `Fire` 에 사용된 값이 호출 인자로 사용됩니다. 연결을 끊을 수 있도록 `Connection` 이 제공됩니다.
+
+---
+
+`#!ts :Once((...any)->())->Connection`
+> `Connect` 와 유사하지만, `Fire` 가 한번 호출된 뒤 연결이 끊어집니다/
+
+---
+
+`#!ts :CheckConnected(func)->boolean`
+> 함수가 이미 등록되어 있는지 여부를 반환합니다.
+
+---
+
+`#!ts :DisconnectAll()`
+> 모든 연결을 끊습니다. `Wait` 으로 기다리고 있는 곳에는 `nil` 을 반환합니다.
+
+---
+
+`#!ts :Destroy()`
+> `#!ts :DisconnectAll()` 를 수행한 후, 객체를 더이상 사용할 수 없도록 만듭니다.
+> `id` 가 등록되어 있는경우 저장소에서 파기하게 됩니다.
diff --git a/md/kr/include/connection.md b/md/kr/include/connection.md
new file mode 100644
index 0000000..3e51aad
--- /dev/null
+++ b/md/kr/include/connection.md
@@ -0,0 +1,8 @@
+
+`#!ts :Disconnect()`
+> 연결을 끊습니다. `Fire` 가 호출되더라도 `Connect` 혹은 `Once` 에 사용된 함수가 실행되지 않습니다.
+
+---
+
+`#!ts :Destroy()`
+> `#!ts :Disconnect()` 의 별칭입니다.
diff --git a/md/kr/include/disconnecter.md b/md/kr/include/disconnecter.md
new file mode 100644
index 0000000..a8e2ce7
--- /dev/null
+++ b/md/kr/include/disconnecter.md
@@ -0,0 +1,14 @@
+`#!ts :Add(connection:Connection|RBXScriptConnection)`
+> `connection`을 리스트에 추가합니다. 나중에 `:Disconnect`를 호출하면 추가된 연결이 파기됩니다.
+
+---
+
+`#!ts :Disconnect()`
+> 추가된 모든 연결에 `Disconnect()` 를 수행합니다. 이 호출 후에 추가된 연결은 모두 사라지며. 이 요청 후에도 다시 `:Add` 를 사용할 수 있습니다
+> Disconnecter 를 완전히 사용하지 못하도록 하려면 `:Destroy` 를 호출하세요
+
+---
+
+`#!ts :Destroy()`
+> `#!ts :Disconnect()` 를 수행한 후, 객체를 더이상 사용할 수 없도록 만듭니다.
+> `id` 가 등록되어 있는경우 저장소에서 파기하게 됩니다.
diff --git a/md/kr/include/extend.md b/md/kr/include/extend.md
new file mode 100644
index 0000000..539cb89
--- /dev/null
+++ b/md/kr/include/extend.md
@@ -0,0 +1,31 @@
+
+`self(name:string)`
+> Extend 메소드 전역에서 사용가능합니다. 링커를 만들며, `PropertyChangedSignal` 를 이어주거나, self 에 원하는 오브젝트를 넣는 용도로 사용됩니다. 자세한 정보는 Render 를 확인해주세요.
+
+---
+
+==REQUIRED== `:Render(props:valueStore)`
+
+
+화면에 그려지는 UI 를 만들어지게 하는 함수입니다. `Extend` 가 그려지려면 무조건 있어야합니다.
+이 오브젝트를 그리는데 들어간 프로퍼티 목록을 첫번째 인자로 줍니다. 레지스터 문법이 사용될 수 있습니다.
+
+=== 예제
+
+```lua
+
+```
+
+```
+
+
+
+==OPTION== AfterRender
+Getter Setter
+Update
+GetPropertyChangedSignal
+EmitPropertyChangedSignal
+Unload
+self()
+UpdateTriggers
+
diff --git a/md/kr/include/objectList.md b/md/kr/include/objectList.md
index 1289505..eafb7be 100644
--- a/md/kr/include/objectList.md
+++ b/md/kr/include/objectList.md
@@ -1,13 +1,19 @@
`#!ts :Each((item:any, index:number)->())`
> 일반적인 반복입니다. for 를 사용하는것과 효과가 같으나 함수를 이용합니다
+---
+
`#!ts :EachAsync((item:any, index:number)->())`
> 반환을 기다리지 않고 바로바로 다음 아이템으로 넘어갑니다.
> 코루틴이 이용됩니다. `wrap()` 코루틴을 모르거나, 필요성이 없는경우 일반적으로 `#!ts :Each` 를 사용해도 됩니다
+---
+
`#!ts :IsEmpty()`
> 이 ObjectList 가 비어있는지 여부를 반환합니다.
+---
+
`#!ts :Remove(indexOrItem:number|any)`
> objectList 에서 해당하는 오브젝트를 제거합니다.
> , & 를 사용한 고급 검색에서는 작동하지 않습니다
diff --git a/md/kr/include/register.md b/md/kr/include/register.md
index 057fe11..cc004f0 100644
--- a/md/kr/include/register.md
+++ b/md/kr/include/register.md
@@ -2,9 +2,10 @@
`register` 특수 메소드가 적용되는 순서는 다음과 같습니다.
`#!ts :Add(value:any)->register`
-> 값에 더하기를 취합니다. 음수형태가 제공되는 경우 빼기 처럼 작동합니다.
-> `number`, `Udim`, `UDim2`, `Color3`, `Vector2` 등 더할 수 있는 모든것을 사용할 수 있습니다
-> *주의 : 구조의 복잡성을 피하고자, 여러번 호출시 가장 마지막 호출된 것만 사용됩니다*
+
+
+값에 더하기를 취합니다. 음수형태가 제공되는 경우 빼기 처럼 작동합니다.
+`number`, `Udim`, `UDim2`, `Color3`, `Vector2` 등 더할 수 있는 모든것을 사용할 수 있습니다
```lua
-- 용법
local ScreenGUI = script.Parent
@@ -28,6 +29,9 @@ while true do
task.wait(2)
end
```
+???+ Warning "주의"
+ 구조의 복잡성을 피하고자, 여러번 호출시 가장 마지막 호출된 것만 사용됩니다
+
---
diff --git a/md/kr/tutorial/10_signal.md b/md/kr/tutorial/10_signal.md
index 86e96c8..b3305d8 100644
--- a/md/kr/tutorial/10_signal.md
+++ b/md/kr/tutorial/10_signal.md
@@ -1,5 +1,69 @@
-# Signal
+# Signal - 이벤트 생성과 연결
-Quad 에는 편의상의 이유로
+???+ info "읽기 전..."
+ 모듈 설정시 `#!ts .Init()` 처럼 QuadId 란을 비워두는 경우 `Bindable`, `Disconnecter` 기능이 코드를 넘어 공유되지 않습니다
+ 하지만 `#!ts .Init("Project1")` 처럼 아이디를 부여하는 경우 **다른 모듈, 로컬스크립트가 접근하더라도 같은 QuadId 를 가졌다면 `Bindable`, `Disconnecter` 는 공유됩니다**
+Quad 에는 편의상의 이유로 로블록스의 `RBXScriptSignal` 의 유사품과, 한번에 시그널을 끊어주는 `Disconnecter` 를 제공합니다.
+이는 내부적으로 `Extend` 의 `GetPropertyChangedSignal` 같은 곳에서 사용되기도 합니다.
+
+## Bindable
+
+Bindable 은 `RBXScriptSignal` 과 유사한 객체입니다. `#!ts Signal.Bindable.New(id:string?)` 으로 생성할 수 있습니다.
+로블록스의 기본 `BindableEvent` 와는 다르게 `:Fire` 가 한곳에 합쳐져 있습니다.
+???+ note
+ 만약 `id` 를 지정한 경우, 같은 `id` 를 가진 `Bindable` 이 있으면 이전것을 반환합니다.
+
+```lua
+local Quad = require(path.to.module).Init()
+local Signal = Quad.Signal
+
+local mySignal = Signal.Bindable.New()
+
+local connection = mySignal:Connect(function(v)
+ print(v)
+end)
+mySignal:Fire("이 메시지는 출력되어야 합니다.")
+connection:Disconnect()
+mySignal:Fire("이 메시지는 출력되면 안됩니다.")
+
+task.spawn(function()
+ task.wait(5)
+ mySignal:Fire("이 메시지는 지연된 후 출력되어야 합니다.")
+end)
+print(mySignal:Wait())
+
+mySignal:Once(function(v)
+ print(v)
+end)
+mySignal:Fire("이 메시지는 출력되어야 합니다.")
+mySignal:Fire("이 메시지는 출력되면 안됩니다.")
+
+mySignal:Once(function(v)
+ print(v)
+end):Disconnect()
+mySignal:Fire("이 메시지는 출력되면 안됩니다.")
+```
+
+### Bindable 메소드
+
+`Bindable` 에는 다음과 같은 메소드들이 제공됩니다.
+
+{!include/bindable.md!}
+
+### Connection 메소드
+
+Bindable:Connect 와 Bindable:Once 는 `Connection` 을 반환합니다. `Connection` 에는 다음과 같은 메소드들이 제공됩니다.
+
+{!include/connection.md!}
+
+---
+
+## Disconnecter
+
+`Disconnecter` 는 일종의 `Maid` 모듈과 비슷한 객체입니다. 이 객체에는 `Connection` (로블록스, Quad 모두 호환) 을 추가할 수 있으며, 나중에 추가된 `Connection` 을 한꺼번에 `Disconnect` 할 수 있습니다. `#!ts Signal.Disconnecter.New(id:string?)` 으로 생성할 수 있습니다.
+???+ note
+ 만약 `id` 를 지정한 경우, 같은 `id` 를 가진 `Bindable` 이 있으면 이전것을 반환합니다.
+
+{!include/disconnecter.md!}
diff --git a/md/kr/tutorial/11_extend.md b/md/kr/tutorial/11_extend.md
index e69de29..1900e8e 100644
--- a/md/kr/tutorial/11_extend.md
+++ b/md/kr/tutorial/11_extend.md
@@ -0,0 +1,158 @@
+# Extend - 확장과 재사용
+
+## 나만의 클래스를 만들어보자
+
+Quad 에서는 로블록스의 `Frame` 이나 `TextButton` 같은 기본 오브젝트만 만들 수 있는것이 아닙니다. Quad 는 자신만의 버튼, 혹은 여러 컴포넌트들을 추상적으로 만들고. 다시 활용할 수 있도록 `Extend` 를 지원합니다.
+
+`Extend` 는 `Register` 와 더불어 Quad 의 가장 중요한 기능으로써, 다음과 같은 장점을 지닙니다.
+
+> 1. 재사용 가능합니다. 나만의 버튼을 만들고, 고치고 싶은 마음이 생겨 고치면 자동으로 사용된 곳들이 업데이트됩니다.
+> 2. 긴 코드를 나누어 코드마다 확실한 목적을 부여해 더 명확한 코드 작성이 가능해집니다.
+> 3. 자신만의 프로퍼티를 만들거나 완전히 원하는대로 오브젝트를 커스터마이징 할 수 있습니다.
+> 4. 함수나 생성기를 직접 만드는 것 보다 일관된 방법을 제공합니다.
+
+`Extend` 객체는 다음과 같이 생성합니다.
+```lua
+local Quad = require(path.to.module).Init()
+local Class = Quad.Class
+
+-- extend 객체를 만듭니다
+local myClass = Class.Extend()
+```
+일반적으로 Extend 는 한 모듈에 하나씩 넣습니다.
+
+다음과 같은 코드 구조를 만들어보세요.
+```
+ - ScreenGUI
+ |-- localscript
+ |-- myClass (ModuleScript)
+```
+
+=== "localscript"
+
+ ```lua
+ local ScreenGUI = script.Parent
+ local Quad = require(path.to.module).Init()
+ local Mount = Quad.Mount
+ local Class = Quad.Class
+ local Store = Quad.Store
+
+ local myStore = Store.GetStore("myStore")
+ myStore.bgColor = Color3.fromRGB(0,0,0)
+
+ -- Class(require(script.myClass)) 와 같습니다.
+ -- 줄여서 Class(script.myClass) 로 쓸 수도 있습니다.
+ local myClass = Class(script.myClass)
+
+ -- 프레임에 넣거나 하여도 무방합니다
+ -- 일반 오브젝트와 똑같이 id 를 넣고 GetObject 로
+ -- 가져올 수도 있습니다
+ local main = myClass "main" {
+ Testing = 1;
+ Text = "Test";
+ -- 레지스터 값을 넘겨줄 수도 있습니다.
+ -- 받는쪽도 레지스터인 경우 값이 연동됩니다.
+ BackgroundColor3 = myStore "bgColor";
+ }
+
+ Mount(ScreenGUI,main)
+ print(Store.GetObject("main") == main) -- true
+
+ -- 이 값을 바꾸면 연동된 BackgroundColor3 도 바뀔것입니다
+ myStore.bgColor = Color3.fromRGB(255,255,255)
+
+ -- 값 변경됨을 연결하기
+ main
+ :GetPropertyChangedSignal("AbsolutePosition")
+ :Connect(function()
+ print("AbsolutePosition",main.AbsolutePosition)
+ end)
+
+ -- main:Update()
+ -- 강제로 다시 Render 를 실행하도록 만듭니다.
+ ```
+
+=== "localscript.myClass"
+
+ ```lua
+ local Quad = require(path.to.module).Init()
+ local Class = Quad.Class
+ local Event = Quad.Event
+
+ local TextLabel = Class "TextLabel"
+
+ local myClass = Class.Extend()
+
+ -- Init 에는 프로퍼티 리스트가 제공됩니다.
+ -- Init 는 없더라도 무방합니다.
+ function myClass:Init(props)
+ -- 생성된 오브젝트에 프라이빗 값을 만듭니다.
+ -- 이름 앞에 _ 가 붇으면 외부에서 사용되는 목적이 아닌
+ -- 내부에서 사용되는 목적으로만 사용할 수 있습니다
+ -- 이 경우 안전성을 위해 register 를 사용할 수
+ -- 없습니다.
+ self._testValue = 2
+
+ -- 프로퍼티의 기본값을 정해줄 수 있습니다.
+ -- 생성 시 값이 누락된 경우 사용할 값을 정해줄 수 있습니다
+ -- 키, 값 으로 구성합니다
+ props:Default("Text","Testing Label")
+ end
+
+ -- myClass 가 진짜 그려지는 부분입니다.
+ -- Render 도 Init 처럼 프로퍼티 리스트가 제공됩니다.
+ function myClass:Init(props)
+ return TextLabel {
+ -- self 에 _label 로 이 TextLabel 을 넣습니다.
+ -- 자식 오브젝트에도 사용할 수 있는 문법입니다.
+ self "_label";
+
+ -- GetPropertyChangedSignal 가 작동할 수 있도록
+ -- 프로퍼티 변경 이벤트를 연결해줍니다
+ -- 이 또한 자식 오브젝트에도 사용할 수 있는 문법입니다.
+ [Event.Prop "AbsolutePosition"] = self "AbsolutePosition";
+ -- 마우스 클릭같은 다른 이벤트를 GetPropertyChangedSignal 에
+ -- 연결하려면 :EmitPropertyChangedSignal() 를 호출해주면 됩니다.
+ [Event "MouseEnter"] = function (this,x,y)
+ -- 키, 값이 들어갑니다. 값이 없으면 self[key] 로 대신합니다.
+ self:EmitPropertyChangedSignal("Testing2",1)
+ end;
+
+ -- 받은 레지스터를 연동합니다.
+ -- 만약 props.BackgroundColor3 만 사용하면
+ -- 처음에만 레지스터에서 값을 읽어옵니다.
+ -- 따라서 값을 변경해도 변경사항이 적용되지 않습니다.
+ BackgroundColor3 = props "BackgroundColor3";
+
+ -- 입력 값과 상관없이 레지스터를 쓸 수 있습니다.
+ -- 이 경우 main.Text = "New" 처럼 직접 변경하면
+ -- 그 변경이 적용됩니다.
+ Text = props "Text";
+
+ -- ... 자식을 넣어도 무방합니다.
+ }
+ end
+
+ -- function myClass:Unload(object)
+ -- :Destroy 가 호출될 때 사용됩니다. 따로 선언하지 않아도
+ -- 연결을 모두 끊고 없에주지만 필요한 경우 직접 없에줄 수 있습니다
+ -- object 는 :Render 가 반환한 값입니다
+
+ -- AbsolutePosition 값을 반환할 수 있도록 만듭니다
+ function myClass.Getter.AbsolutePosition(self)
+ return self._label.AbsolutePosition
+ end
+
+ -- AbsolutePosition 값을 설정할 수 없도록 만듭니다
+ function myClass.Setter.AbsolutePosition(self,newValue)
+ -- 필요한 경우 값을 설정하도록 만들 수 있습니다
+ error("AbsolutePosition 값은 설정할 수 없습니다")
+ end
+
+ -- main.Testing = 2 다음과 같이 값을 변경하면 오브젝트가
+ -- 완전히 다시 그려집니다. 즉 업데이트 트리거로 사용합니다.
+ myClass.UpdateTriggers.Testing = true
+
+ -- 만든 클래스를 반환해줍시다.
+ return myClass
+ ```
diff --git a/md/kr/tutorial/2_mount.md b/md/kr/tutorial/2_mount.md
index 3f76154..f5cd688 100644
--- a/md/kr/tutorial/2_mount.md
+++ b/md/kr/tutorial/2_mount.md
@@ -3,7 +3,7 @@
## 화면에 UI 를 표시하기
-일반적으로 *Quad* 모듈에서 모든 Parent 처리는 `#!ts Mount` 를 이용합니다. `#!ts Mount(to:any,...item:any?)->mounts` 함수를 이용하면 다루는 오브젝트가 로블록스 `Instance` 인지, 향후 소개될 Quad 확장 클래스인지 상관없이 알아서 Parent 가 처리됩니다.
+*Quad* 모듈에서 모든 Parent 처리는 `#!ts Mount` 를 이용합니다. `#!ts Mount(to:any,...item:any?)->mounts` 함수를 이용하면 다루는 오브젝트가 로블록스 `Instance` 인지, 향후 소개될 Quad 확장 클래스인지 상관없이 알아서 Parent 가 처리됩니다.
```lua
--- StarterGui 안에 ScreenGui 를 넣고 로컬스크립트로 입력해보세요
diff --git a/md/kr/tutorial/3_getObject.md b/md/kr/tutorial/3_getObject.md
index 08ba518..ca6b398 100644
--- a/md/kr/tutorial/3_getObject.md
+++ b/md/kr/tutorial/3_getObject.md
@@ -112,15 +112,18 @@ end
id 기능을 조금더 고급적인 방법으로 사용할 수도 있습니다.
-=== 용법
+=== "용법"
```lua
- Frame "a,b" {
-
- }
+ -- 두 아이디를 가진 프레임을 생성합니다
+ Frame "a,b" {}
+ -- a 를 가진것과, a 와 b 를 가진것을 가져옵니다
+ Store.GetObjects("a,a&b"):Each(function(item)
+ print(item)
+ end)
```
-=== 예제
+=== "예제"
좀더 직관적인 확인을 위해서 작동시켜보세요.
@@ -198,4 +201,4 @@ Store.GetObjects("a"):Remove(Store.GetObject("testing"))
```
`#!ts Store.AddObject(ids:string, item:any)` 를 이용해 item 에 아이디를 추가하고
-`#!ts :Remove(item:any)` 를 이용해 item 에 아이디를 제거합니다
+`#!ts :Remove(item:any)` 를 이용해 item 에 아이디를 제거합니다
diff --git a/md/kr/tutorial/4_style.md b/md/kr/tutorial/4_style.md
index 3151185..6aad132 100644
--- a/md/kr/tutorial/4_style.md
+++ b/md/kr/tutorial/4_style.md
@@ -1,5 +1,5 @@
-# 반복되는 속성값을 줄이기
+# Style - 속성 값 번들링
???+ info "읽기 전..."
모듈 설정시 `#!ts .Init()` 처럼 QuadId 란을 비워두는 경우 `Style` 기능이 코드를 넘어 공유되지 않습니다
@@ -7,6 +7,8 @@
---
+## 반복되는 속성값을 줄이기
+
Quad 에서는 반복적인 속성들을 줄여 쓸 수 있도록 Style 을 제공합니다.
```lua
@@ -51,7 +53,11 @@ Mount(ScreenGUI,Store.GetObject("mainFrame"))
`#!ts Style`을 사용하면 많은 양의 속성을 하나에 변수로 집어넣을 수 있습니다. `#!ts Style`을 사용해서 많은 양의 코드를 줄여보세요
-또, `#!ts Style`에는 타겟 id를 지정해줄 수 있습니다
+---
+
+## ID 로 타겟을 지정하기
+
+`#!ts Style`에는 `타겟 id`를 지정해줄 수 있습니다
```lua
local ScreenGUI = script.Parent
@@ -80,4 +86,4 @@ Frame "mainFrame" {
Mount(ScreenGUI,Store.GetObject("mainFrame"))
```
-`#!ts Style(id:string){ any }`를 이용해 스타일을 선언해주면 나중에 해당 id를 가진 오브젝트 생성시 해당 스타일이 적용됩니다.
+`#!ts Style(id:string){ any }`를 이용해 스타일을 선언해주면 나중에 해당 id를 가진 오브젝트 생성시 해당 스타일이 적용됩니다.
diff --git a/md/kr/tutorial/6_tween.md b/md/kr/tutorial/6_tween.md
index 17d5c06..52a8b02 100644
--- a/md/kr/tutorial/6_tween.md
+++ b/md/kr/tutorial/6_tween.md
@@ -79,3 +79,5 @@ Quad 에서는 실제로 직접적으로 Tween 을 사용할 일은 적으며
## 트윈 함수
Quad 의 트윈에는 트윈을 멈추거나 트윈중인지 확인하는 등의 작업을 할 수 있는 여러 함수들이 제공됩니다.
+
+{!include/tween.md!}
diff --git a/md/kr/tutorial/9_lang.md b/md/kr/tutorial/9_lang.md
index 8a9c307..bb5fecc 100644
--- a/md/kr/tutorial/9_lang.md
+++ b/md/kr/tutorial/9_lang.md
@@ -1,5 +1,5 @@
-# 언어관리
+# Lang - 언어관리
???+ info "읽기 전..."
모듈 설정시 `#!ts .Init()` 처럼 QuadId 란을 비워두는 경우 `Lang` 기능이 코드를 넘어 공유되지 않습니다
@@ -9,56 +9,77 @@
## 언어관리
-Quad 에는 귀찮은 언어관리를 자동으로 해주는 기능이 내장되어 있습니다.
-이 기능은 register 와 연동해 적은 줄의 코드로 변하는 텍스트도 언어에 맞게 출력되도록 만들 수 있습니다.
+Quad 에는 귀찮은 언어관리를 자동으로 해주는 기능이 내장되어 있습니다. 이 기능은 register 와 연동해 적은 줄의 코드로 변하는 텍스트도 언어에 맞게 출력되도록 만들 수 있습니다.
-```lua
-local ScreenGUI = script.Parent
-local Quad = require(path.to.module).Init()
-local Store = Quad.Store
-local Mount = Quad.Mount
-local Event = Quad.Event
-local Lang = Quad.Lang
-local Class = Quad.Class
+번역 테이블은 `#!ts Lang.New(LangName:string,{ [Locale]: string|(options)->string })` 다음을 이용해 만들 수 있으며.
+`Lang(LangName:string)(options)` 로 UI 에 적용시킬 수 있습니다.
-local TextButton = Class "TextButton"
+=== "용법"
-local myStore = Store.GetStore("myStore")
-myStore.count = 0
+ ```lua
+ -- 자세한 설명은 예제를 참고하세요
+ Lang.New("Test",{
+ [Lang.Locales.Korean] = "{won} 원";
+ [Lang.Locales.Default] = "{won} Won";
+ })
+ TextLabel {
+ Lang "Test" {
+ won = 100;
+ };
+ }
+ ```
-Lang.New("TimePassed",{
- [Lang.Locales.Korean] = "{count}초 지났어요";
- [Lang.Locales.Default] = function (options)
- -- 함수 또한 등록할 수 있습니다.
- if options.count > 1 then
- return ("%d seconds passed"):format(options.count)
- else
- return ("%d second passed"):format(options.count)
+=== "예제 - 다중언어 카운터"
+
+ 1초가 지날 때 마다 카운트를 증가합니다. 영어 사용자에겐 영어를, 한국어 사용자에겐 한국어를 보여줍니다.
+
+ ```lua
+ local ScreenGUI = script.Parent
+ local Quad = require(path.to.module).Init()
+ local Store = Quad.Store
+ local Mount = Quad.Mount
+ local Event = Quad.Event
+ local Lang = Quad.Lang
+ local Class = Quad.Class
+
+ local TextButton = Class "TextButton"
+
+ local myStore = Store.GetStore("myStore")
+ myStore.count = 0
+
+ Lang.New("TimePassed",{
+ [Lang.Locales.Korean] = "{count}초 지났어요";
+ [Lang.Locales.Default] = function (options)
+ -- 함수 또한 등록할 수 있습니다.
+ if options.count > 1 then
+ return ("%d seconds passed"):format(options.count)
+ else
+ return ("%d second passed"):format(options.count)
+ end
+ end;
+ })
+
+ TextButton "mainButton" {
+ Size = UDim2.fromOffset(100,100);
+ Text = Lang "TimePassed" {
+ -- count = 1 일반적인 값도 사용가능합니다
+ count = myStore "count";
+ };
+ [Event "MouseButton1Click"] = function()
+ -- 클릭시 언어가 변경됩니다
+ if Lang.CurrentLocale == Lang.Locales.Default then
+ Lang.CurrentLocale = Lang.Locales.Korean
+ else
+ Lang.CurrentLocale = Lang.Locales.Default
+ end
end
- end;
-})
+ }
+ Mount(ScreenGUIk,Store.GetObject("mainButton"))
-TextButton "mainButton" {
- Size = UDim2.fromOffset(100,100);
- Text = Lang "TimePassed" {
- -- count = 1 일반적인 값도 사용가능합니다
- count = myStore "count";
- };
- [Event "MouseButton1Click"] = function()
- -- 클릭시 언어가 변경됩니다
- if Lang.CurrentLocale == Lang.Locales.Default then
- Lang.CurrentLocale = Lang.Locales.Korean
- else
- Lang.CurrentLocale = Lang.Locales.Default
- end
+ while task.wait(1) do
+ myStore.count = myStore.count + 1
end
-}
-Mount(ScreenGUIk,Store.GetObject("mainButton"))
-
-while task.wait(1) do
- myStore.count = myStore.count + 1
-end
-```
+ ```
---
diff --git a/src/class.lua b/src/class.lua
index 35a80b0..e773e4e 100644
--- a/src/class.lua
+++ b/src/class.lua
@@ -123,9 +123,9 @@ function module.init(shared)
local name = linker.name
if indexType == "number" then
-- set
- if rawget(target,name) ~= nil then
- warn(("%s is exist already. Overwrite it"))
- end
+ -- if rawget(target,name) ~= nil then
+ -- warn(("%s is exist already. Overwrite it"))
+ -- end
rawset(target,name,item)
-- target[name] = item
elseif indexType == "string" then
@@ -410,6 +410,9 @@ function module.init(shared)
if not thisSignal then
return
end
+ if not value then
+ value = self[propertyName]
+ end
thisSignal:Fire(value)
end
diff --git a/src/signal.lua b/src/signal.lua
index 551e421..f120be6 100644
--- a/src/signal.lua
+++ b/src/signal.lua
@@ -35,6 +35,7 @@ function module.init(shared)
pcall(v.Disconnect,v)
self[i] = nil
end
+ setmetatable(self,nil)
end
function disconnecterClass.New(id)
if id then
@@ -59,11 +60,11 @@ function module.init(shared)
function connection:Disconnect(slient)
local signal = self.signal
local onceConnection = signal.onceConnection
- local connection = signal.connection
+ local connections = signal.connection
- for i,v in pairs(connection) do
+ for i,v in pairs(connections) do
if v.connection == self then
- remove(connection,i)
+ remove(connections,i)
return
end
end
@@ -104,14 +105,23 @@ function module.init(shared)
task.spawn(v.func,...)
end
end
+ function signal:DisconnectAll()
+ local waitting = self.waitting
+ self.waitting = {}
+ self.onceConnection = {}
+ self.connection = {}
+ for _,v in pairs(waitting) do
+ task.spawn(resume,v,nil)
+ end
+ end
function signal:Wait()
insert(self.waitting,running())
return yield()
end
function signal:CheckConnected(func)
local onceConnection = self.onceConnection
- local connection = self.connection
- for _,v in pairs(connection) do
+ local connections = self.connection
+ for _,v in pairs(connections) do
if v.func == func then
return true
end
@@ -140,16 +150,18 @@ function module.init(shared)
return thisConnection
end
function signal:Destroy()
- self.waitting = nil
- self.onceConnection = nil
- self.connection = nil
+ local id = self.id
+ if id then
+ signals[id] = nil
+ end
+ self:DisconnectAll()
setmetatable(self,nil)
end
function signal.New(id)
if id and signals[id] then
return signals[id]
end
- local this = {waitting={},onceConnection={},connection={}}
+ local this = {id=id,waitting={},onceConnection={},connection={}}
setmetatable(this,signal)
if id then
signals[id] = this