diff --git a/docs/en/sitemap.xml.gz b/docs/en/sitemap.xml.gz index d8531e7..100a8ce 100644 Binary files a/docs/en/sitemap.xml.gz and b/docs/en/sitemap.xml.gz differ diff --git a/docs/kr/include/register/index.html b/docs/kr/include/register/index.html index 57c0abe..d3d8f16 100644 --- a/docs/kr/include/register/index.html +++ b/docs/kr/include/register/index.html @@ -1518,6 +1518,30 @@

Register 안에 들어간 함수는 GC 안정성을 위해서 약한 참조로 저장됩니다. 따라서 함수를 저장해야합니다.

+
+

:Observe((newValue:any)->())

+
+

:Register의 간소화 버전입니다. :Register와 다르게 자동적으로 들어간 함수를 GC 로 부터 보호하기 때문에 들어간 함수를 따로 저장 할 필요가 없으며, 인자는 newValue 하나만 주어집니다.

+

newValue:Add, :With, :Tween, :Default 가 계산된 상태로 제공됩니다.

+
+
+
+
1
+2
+3
+4
+5
+6
myStore.test = 1
+myStore "test":Add(1):Observe(function(_,newValue)
+    -- 값 변경시 출력됩니다
+    print(newValue)
+end)
+myStore.test = 2
+
+
+
+
+
diff --git a/docs/kr/search/search_index.json b/docs/kr/search/search_index.json index 0cd9628..a3b854d 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":"changelogs/","title":"\ubc84\uc804 \ubc88\uacbd\uc0ac\ud56d","text":""},{"location":"changelogs/#225","title":"2.25","text":"

\uc2e4\ud5d8\uc801 API \ub85c\uc368 GetChildren() \uacfc ChildAdded::Bindable \uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4.

"},{"location":"changelogs/#224","title":"2.24","text":"

\ubaa8\ub4e0 \ubb38\uc11c\uac00 \uc815\ub9ac\ub418\uc5c8\uc2b5\ub2c8\ub2e4.

"},{"location":"changelogs/#223","title":"2.23","text":"

\uac1d\uccb4 \uc0dd\uc131\uc2dc \uc77c\uc5b4\ub098\ub294 \uc624\ub958\ub97c \ud574\uacb0\ud588\uc2b5\ub2c8\ub2e4. \uc774\uc81c Extend \uac1d\uccb4 \ub0b4\ubd80 \uc790\uc2dd\uc774 Unmount \ub418\ub294 \uacbd\uc6b0 __child \uc5d0\uc11c \uc81c\uac70\ub429\ub2c8\ub2e4. types \uc758 \uc624\ud0c0\ub97c \uace0\ucce4\uc2b5\ub2c8\ub2e4.

"},{"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":"gallery/","title":"\uac24\ub7ec\ub9ac","text":"

\uc5ec\uae30\ub294 \uc5ec\ub7ec\ubd84\ub4e4\uc758 \uc791\ud488\uc744 \uc62c\ub824\ubcfc \uc218 \uc788\ub294 \uacf3\uc785\ub2c8\ub2e4! Quad \ub97c \uc0ac\uc6a9\ud55c \uc5ec\ub7ec\uac00\uc9c0 \ud6cc\ub96d\ud55c \uc791\ud488\ub4e4\uc744 \ubcf4\uc5ec\uc8fc\uc138\uc694!

"},{"location":"license/","title":"\ub77c\uc774\uc120\uc2a4","text":"

QwreeyKawaii License v1.3

KoreanEnglish Permissions Limitations Conditions \u2705 \uc0c1\uc5c5\uc801 \uc0ac\uc6a9 \u274e \ubcf4\uc99d \u2753 \ub77c\uc774\uc120\uc2a4\uc640 \uc800\uc791\uad8c \uace0\uc9c0 (\uad8c\uace0\uc0ac\ud56d) \u2705 \ubc30\ud3ec \u274e \ubb34\ub840\ud558\uac8c \uad74\uae30 \u2705 \ubcc0\uacbd/\uc218\uc815/2\ucc28\uc800\uc791 \u274e \ub7ec\uc2dc\uc544\ub97c \ube44\ub86f\ud55c \uc804\uc7c1\uc744 \ub3d5\ub294 \u2705 \uac1c\uc778\uc801 \uc0ac\uc6a9 \u274e \uc544\ubb34\ub7f0 \ubcc0\uacbd\uc0ac\ud56d \uc5c6\uc774 \ubcf5\uc81c
          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
Permissions Limitations Conditions \u2705 Commercial use \u274e Warranty \u2753 License and copyright notice (Recommendation) \u2705 Distribution \u274e Being Rude \u2705 Modification \u274e Russian, And supporting war \u2705 Private use \u274e Copy without any modification
          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":"todo/","title":"\ud560\uc77c","text":""},{"location":"todo/#_2","title":"\uc9c4\ud589\uc911\uc774\uac70\ub098 \uac80\ud1a0\uc911","text":""},{"location":"todo/#easing","title":"Easing \ubb38\uc11c","text":"

Easing \ubb38\uc11c\uc5d0 Out In Inout \ube44\uad50 \uc601\uc0c1 \ub9cc\ub4e4\uae30

"},{"location":"todo/#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":"todo/#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":"todo/#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":"todo/#_3","title":"\uba3c \ubbf8\ub798\uc5d0 . . .","text":"

\ud639\uc740 \uc774\ub8e8\uc6cc\uc9c0\uc9c0 \uc54a\ub294

"},{"location":"todo/#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.

"},{"location":"todo/#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.

"},{"location":"todo/#quad-prerender","title":"Quad Prerender","text":"

\ubbf8\ub9ac \ub80c\ub354\ub9c1\ub41c rbxm \uac1d\uccb4\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. lua \uc2a4\ud06c\ub9bd\ud2b8\ub4e4\uc774 \ub9e4\ud551\ub418\uc5b4 \uc77c\ubc18\uc801\uc774\uac8c \ub3cc\uc544\uac11\ub2c8\ub2e4.

"},{"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/directions/","title":"Directions","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":"\ubbf8\ub9ac\ubcf4\uae30\uadf8\ub798\ud504 \uac1c\ud615

\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)->linker

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.

Overwite 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 \ub9cc\ub4dc\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.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Event = Quad.Event\nlocal Mount = Quad.Mount\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        [Event \"MouseButton1Click\"] = function (self,x,y)\n            print((\"\ubc84\ud2bc\uc774 %d,%d \uc5d0\uc11c \ub20c\ub838\uc2b5\ub2c8\ub2e4\"):format(x,y))\n        end;\n        Size = props \"Size\";\n        Text = props \"Text\"; -- \ub808\uc9c0\uc2a4\ud130\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4\n    }\nend\n\nlocal myImported = Class(myClass)\nmyImported.Size = UDim2.fromOffset(200,200)\n\nlocal test = myImported {\n    Text = \"wow\"\n}\nMount(ScreenGUI, test)\n\n-- \ud14d\uc2a4\ud2b8\ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4\nwhile task.wait(1) do\n    test.Text = \"w\"..(\"o\"):rep(#test.Text-1)..\"w\"\nend\n

Overwite Option :Init(props:valueStore)

\uc120\ud0dd\uc801\uc778 \uba54\uc18c\ub4dc\ub85c, Render \uac00 \uc218\ud589 \ub418\uae30 \uc804\uc5d0 \ubbf8\ub9ac props \uac12\uc744 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Init(props)\n    -- Size \uac12\uc774 \uc5c6\ub2e4\uba74 \uae30\ubcf8\uac12\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4.\n    props:Default(\"Size\", UDim2.fromOffset(100,100))\n\n    -- \uc55e\uc5d0 _ \ub97c \ubd87\uc5ec \ub0b4\ubd80 \ubcc0\uc218\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.\n    -- \uc5b4\ub514\uc5d0\uc11c\ub098 \uc4f0\uc77c \uc218 \uc788\uc73c\uba70 register \uc5d0 \uc601\ud5a5\uc8fc\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n    self._asdf = true\nend\nfunction myClass:Render(props)\n    return TextButton {\n        props \"Size\"\n    }\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported() -- \uc635\uc158 \uc5c6\uc74c\nprint(myButton.Size)\n

Overwite Option :AfterRender(object:any)

\uc120\ud0dd\uc801\uc778 \uba54\uc18c\ub4dc\ub85c, Render \uac00 \uc218\ud589 \ub41c \ud6c4 \ud560 \uc791\uc5c5\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uc778\uc790\ub85c Render \uac00 \ubc18\ud658\ud55c \uac12\uc774 \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_button\"; -- \uc790\uae30 \uc790\uc2e0\uc5d0 \uc774 \ubc84\ud2bc\uc744 \ub123\uc2b5\ub2c8\ub2e4\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button == object) -- true\nend\n\nlocal myImported = Class(myClass)\nmyImported() -- \uc635\uc158 \uc5c6\uc74c\n

Overwite Option :Update()

:Render \uc640 :AfterRender \ub97c \ub2e4\uc2dc \uc2e4\ud589\ud558\uace0, \uc774\uc804\uc5d0 \uc788\ub358 \uc790\uc2dd\ub4e4\uc744 \ub2e4\uc2dc \ub04c\uc5b4\uc635\ub2c8\ub2e4. \uc774\uc804\uc758 Render \uacb0\uacfc\ub294 \uc81c\uac70\ub429\ub2c8\ub2e4

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\nlocal count = 0\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    print(\"Rendering!\")\n    count = count + 1\n    return TextButton {\n        self \"_button\";\n        Name = tostring(count);\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button.Name)\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton:Update() -- update\nmyButton:Update() -- update\nmyButton:Update() -- update\n

Overwite Option .Getter.<PropertyName>(self)

\uac12\uc744 \uc5bb\ub294\ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {}\nend\n-- \uac12\uc744 \uc77d\ub294\ub370 \uc0ac\uc6a9\ud560 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4\nfunction myClass.Getter.Test(self)\n    return \"Hello World\"\nend\n\nlocal myImported = Class(myClass)\nprint(myImported().Test)\n

Overwite Option .Setter.<PropertyName>(self,newValue:any)

\uac12\uc744 \uc124\uc815\ud558\ub294\ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_button\";\n        Text = \"wow\";\n    }\nend\n-- \uac12\uc744 \uc9c0\uc815\ud558\ub294\ub370 \uc0ac\uc6a9\ud560 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4\nfunction myClass.Setter.Test(self,newValue)\n    self._button.Text = newValue\nend\nfunction myClass.Getter.Test(self)\n    return self._button.Text\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nprint(myButton.Test)\nmyButton.Test = \"Hello World\"\nprint(myButton.Test)\n

Overwite Option .UpdateTriggers.<PropertyName> = boolean?

\ud574\ub2f9 \uac12\uc744 \ubcc0\uacbd\ud558\uba74 Update \uac00 \uc218\ud589\ub420\uc9c0 \uc5ec\ubd80\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\nlocal count = 0\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    print(\"Rendering!\")\n    count = count + 1\n    return TextButton {\n        self \"_button\";\n        Name = tostring(count);\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button.Name)\nend\n-- \uac12 \ubcc0\uacbd\uc2dc \uc5c5\ub370\uc774\ud2b8 \uc5ec\ubd80\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4\nmyClass.UpdateTriggers.Test = true\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton.Test = 1 -- update\nmyButton.Test = 1 -- update\nmyButton.Test = 1 -- update\n

Overwite Option :Unload(object)

:Destroy \uac00 \ud638\ucd9c\ub420 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ub530\ub85c \uc120\uc5b8\ud558\uc9c0 \uc54a\uc544\ub3c4 \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. object \ub294 :Render \uac00 \ubc18\ud658\ud55c \uac12\uc785\ub2c8\ub2e4

:GetPropertyChangedSignal(propertyName:string)->Bindable

\uac12 \ubcc0\uacbd\uc744 \uc5f0\uacb0\ud560 \uc218 \uc788\ub294 Bindable\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. :EmitPropertyChangedSignal \uc73c\ub85c \uc774 \uc2dc\uadf8\ub110\uc744 \uc791\ub3d9\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud3b8\uc758\uc0c1 \uc774 \uc2dc\uadf8\ub110\uc774 \uc791\ub3d9\ud560 \ub54c, \uc0c8\ub85c\uc6b4 \uac12\uc774 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

:EmitPropertyChangedSignal(propertyName:string,changedValue:any?)

\ud504\ub85c\ud37c\ud2f0 \ubcc0\uacbd\uc2dc :GetPropertyChangedSignal \uc5d0 \ub4f1\ub85d\ub41c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \uc774 \ud568\uc218\ub97c \ud638\ucd9c\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c self.a = 1 \uacfc \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \ubc14\ub85c \uac12\uc744 \uc124\uc815\ud558\ub294 \uacbd\uc6b0 \uc790\ub3d9\uc801\uc73c\ub85c \uc774 \ud568\uc218\uac00 \uc2e4\ud589\ub418\uc9c0\ub9cc, \ud14d\uc2a4\ud2b8 \ubc15\uc2a4\uc758 \ud14d\uc2a4\ud2b8 \ucc98\ub7fc \uac1d\uccb4\uc758 \ubcc0\uacbd\uc0ac\ud56d\uc744 \uc5f0\ub3d9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0 \uc774 \ud568\uc218\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. changedValue \ub294 \uc120\ud0dd\uc0ac\ud56d\uc774\uba70, \uc8fc\uc5b4\uc9c0\uc9c0 \uc54a\uc73c\uba74 self[propertyName]\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_box\";\n        Text = \"test\";\n        Size = UDim2.fromOffset(200,200);\n        [Evnet.Prop \"Text\"] = function (this,newValue)\n            self:EmitPropertyChangedSignal(\"Text\",newValue)\n        end;\n        -- [Evnet.Prop \"Text\"] = self \"Text\" \uc640 \ub3d9\uc77c\ud569\ub2c8\ub2e4.\n        -- self(name:string) \ubb38\ubc95\uc73c\ub85c \ubcc0\uacbd \uc774\ubca4\ud2b8 \uc5ed\uc2dc \ub9c1\ud06c\n        -- \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n    }\nend\nfunction myClass.Getter.Text(self)\n    return self._box.Text\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton:GetPropertyChangedSignal(\"Text\"):Connect(function()\n    print(myButton.Text)\nend)\nMount(ScreenGUI, myButton)\n

Event .ChildAdded:Connect((child)->())->Connection

\uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uac00 \ucd94\uac00\ub420 \ub54c \ubc1c\uc0dd\ud558\ub294 \uc774\ubca4\ud2b8\uc785\ub2c8\ub2e4. :Init \ub610\ub294 :AfterRender \uc5d0\uc11c \uc0ac\uc6a9\ud558\uba74 \uc635\uc158\uc73c\ub85c \ub123\uc740 \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uac00 \uc774 \uc774\ubca4\ud2b8\ub97c \ud1b5\ud574 \uc5bb\uc5b4\uc9c8 \uc218 \uc788\uc73c\uba70, \ucd94\ud6c4 Mount \ub97c \ud1b5\ud574 \ucd94\uac00\ub418\ub294 \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8 \ub610\ud55c \uc774 \uc774\ubca4\ud2b8\ub85c \uc5bb\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_holder\";\n    }\nend\nfunction myClass:AfterRender()\n    self.ChildAdded:Connect(function(child)\n        print(child.Name)\n    end)\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported{\n    -- Init \uc5d0 ChildAdded \ub97c \ub123\uc740\uac83\uc774 \uc544\ub2c8\uae30 \ub54c\ubb38\uc5d0 \ucd9c\ub825\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n    -- \uadf8\ub7ec\ub098 AfterRender \uc5d0 :GetChildren \uc744 \ub123\uc5b4 \uc774 \uc624\ube0c\uc81d\ud2b8\ub97c\n    -- \uc5bb\uc5b4\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n    TextButton { Name = \"Hello \"};\n}\n\nMount(myButton, TextButton{ Name = \"Hello\" })\nMount(myButton, TextButton{ Name = \"World\" })\n

:GetChildren()

\uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \uac00\uc838\uc624\ub294 \ud568\uc218\uc785\ub2c8\ub2e4. :Init() \uc640 :AfterRender() \uc5d0\uc11c\ub294 \ube48 \ud14c\uc774\ube14\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \uc790\uc2dd\uc758 \uc21c\uc11c\ub294 \uc77c\uc815\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_holder\";\n    }\nend\nfunction myClass:AfterRender()\n    for i,v in ipairs(self:GetChildren()) do\n        print(v.Name)\n    end\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported{\n    TextButton { Name = \"Hello World\"};\n}\n\n-- \ub098\uc911\uc5d0 \ucd94\uac00\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub294 \ucd9c\ub825\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\nMount(myButton, TextButton{ Name = \"Hello\" })\nMount(myButton, TextButton{ Name = \"World\" })\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

-- \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

: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/tween/","title":"Tween","text":"

Tween.RunTween(Item:any, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)->TweenHandler

\ud2b8\uc708\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4. \ud2b8\uc708 \uc635\uc158\uc5d0 \ub300\ud55c \uc815\ubcf4\ub294 TweenOptions \ubb38\uc11c\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Ended, OnStepped, Setter, Getter \uac12\uc774 \uc124\uc815\ub418\uba74 Option \uc548\uc758 \uac12\ubcf4\ub2e4 \uc6b0\uc120\uc801\uc73c\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uae30\ub2a5\uc740 TweenOptions\uc758 \ub0b4\uc6a9\uacfc \uac19\uc2b5\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ud2b8\uc708\uc744 \uc911\ub2e8\uc2dc\ud0ac \uc218 \uc788\ub3c4\ub85d TweenHandler \uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4. \ub2e4\ub978 \ud2b8\uc708\uc774 \ubcc0\uacbd\uc911\uc778 \uc18d\uc131\uc774 \ub2e4\uc2dc \ud2b8\uc708\ud558\ub3c4\ub85d \ud638\ucd9c\ub418\uba74, \uc774\uc804 \ud2b8\uc708\uc5d0\uc11c \ud574\ub2f9 \uc18d\uc131\uc740 \ud2b8\uc708\uc774 \uc911\ub2e8\ub418\uba70 \uc0c8\ub85c\uc6b4 \ud2b8\uc708\uc73c\ub85c \ub36e\uc5b4\uc4f0\uae30 \ub429\ub2c8\ub2e4.

Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n

Tween.RunTweens(Items:{[number]:any}, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)

Tween.RunTween \uc640 \uac19\uc73c\ub098 \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub97c \ud55c\uaebc\ubc88\uc5d0 \ud2b8\uc708\ud569\ub2c8\ub2e4. \uc544\ubb34\uac83\ub3c4 \ubc18\ud658\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4

Tween.RunTween({myFrame1, myFrame2, myFrame3},{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n

Tween.StopTween(ItemOrHandler:TweenHandler|any)

\ud2b8\uc708\uc744 \uba48\ucda5\ub2c8\ub2e4. TweenHandler \ub610\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\uc5b4 \uba48\ucd9c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\uc73c\uba74 \uadf8 \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc2e4\ud589\uc911\uc778 \ubaa8\ub4e0 \ud2b8\uc708\uc744 \uba48\ucda5\ub2c8\ub2e4.

TweenHandler \uc774\uc6a9\uc624\ube0c\uc81d\ud2b8 \uc774\uc6a9
local Handler = Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n\nTween.StopTween(Handler)\n
local Handler = Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n\nTween.StopTween(myFrame)\n

Tween.StopPropertyTween(Item:any, PropertyName:string)

\uc624\ube0c\uc81d\ud2b8\uc5d0 \ud2b9\uc815 \ud504\ub85c\ud37c\ud2f0\uc758 \ud2b8\uc708\uc744 \uc911\ub2e8\uc2dc\ud0b5\ub2c8\ub2e4. TweenHandler \ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Tween.StopPropertyTween(ItemOrHandler:IsTweening|any)->boolean

\ud574\ub2f9 \uc624\ube0c\uc81d\ud2b8 \ub610\ub294 TweenHandler \ub85c \ud2b8\uc708\uc774 \uc9c4\ud589\uc911\uc778\uc9c0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud569\ub2c8\ub2e4.

Tween.IsPropertyTweening(Item:any, PropertyName:string)

\ud574\ub2f9 \uc624\ube0c\uc81d\ud2b8\uc758 \ud504\ub85c\ud37c\ud2f0\uac00 \ud2b8\uc708\uc911\uc774\uc9c0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud569\ub2c8\ub2e4. TweenHandler \ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Tween.Easings: { [string]: EasingFunction }

\uc774\uc9d5 \ud568\uc218\ub4e4\uc774 \ub2f4\uaca8\uc788\uc2b5\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
\uadf8\ub798\ud504\uc640 \ubbf8\ub9ac\ubcf4\uae30\ub294 Easings \uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

Tween.Easings: { [string]: EasingFunction }

\uc774\uc9d5 \ud568\uc218\ub4e4\uc774 \ub2f4\uaca8\uc788\uc2b5\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
\uc790\uc138\ud55c \uc815\ubcf4\ub294 Easings \uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\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/typeDirections/","title":"typeDirections","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":"reference/","title":"Reference","text":"

\uc774 \uc139\uc158\uc740 api \ub0b4\uc6a9\uc744 \ub098\uc5f4\ud558\uc9c0\ub9cc, \uae4a\uac8c \uc124\uba85\ud558\uc9c0 \uc54a\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c\ub97c \uc77d\uc5b4\ubcf4\ub294\uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.

"},{"location":"reference/event/","title":"Event","text":""},{"location":"reference/extend/","title":"Extend","text":"

self(name:string)->linker

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.

Overwite 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 \ub9cc\ub4dc\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.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Event = Quad.Event\nlocal Mount = Quad.Mount\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        [Event \"MouseButton1Click\"] = function (self,x,y)\n            print((\"\ubc84\ud2bc\uc774 %d,%d \uc5d0\uc11c \ub20c\ub838\uc2b5\ub2c8\ub2e4\"):format(x,y))\n        end;\n        Size = props \"Size\";\n        Text = props \"Text\"; -- \ub808\uc9c0\uc2a4\ud130\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4\n    }\nend\n\nlocal myImported = Class(myClass)\nmyImported.Size = UDim2.fromOffset(200,200)\n\nlocal test = myImported {\n    Text = \"wow\"\n}\nMount(ScreenGUI, test)\n\n-- \ud14d\uc2a4\ud2b8\ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4\nwhile task.wait(1) do\n    test.Text = \"w\"..(\"o\"):rep(#test.Text-1)..\"w\"\nend\n

Overwite Option :Init(props:valueStore)

\uc120\ud0dd\uc801\uc778 \uba54\uc18c\ub4dc\ub85c, Render \uac00 \uc218\ud589 \ub418\uae30 \uc804\uc5d0 \ubbf8\ub9ac props \uac12\uc744 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Init(props)\n    -- Size \uac12\uc774 \uc5c6\ub2e4\uba74 \uae30\ubcf8\uac12\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4.\n    props:Default(\"Size\", UDim2.fromOffset(100,100))\n\n    -- \uc55e\uc5d0 _ \ub97c \ubd87\uc5ec \ub0b4\ubd80 \ubcc0\uc218\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.\n    -- \uc5b4\ub514\uc5d0\uc11c\ub098 \uc4f0\uc77c \uc218 \uc788\uc73c\uba70 register \uc5d0 \uc601\ud5a5\uc8fc\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n    self._asdf = true\nend\nfunction myClass:Render(props)\n    return TextButton {\n        props \"Size\"\n    }\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported() -- \uc635\uc158 \uc5c6\uc74c\nprint(myButton.Size)\n

Overwite Option :AfterRender(object:any)

\uc120\ud0dd\uc801\uc778 \uba54\uc18c\ub4dc\ub85c, Render \uac00 \uc218\ud589 \ub41c \ud6c4 \ud560 \uc791\uc5c5\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uc778\uc790\ub85c Render \uac00 \ubc18\ud658\ud55c \uac12\uc774 \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_button\"; -- \uc790\uae30 \uc790\uc2e0\uc5d0 \uc774 \ubc84\ud2bc\uc744 \ub123\uc2b5\ub2c8\ub2e4\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button == object) -- true\nend\n\nlocal myImported = Class(myClass)\nmyImported() -- \uc635\uc158 \uc5c6\uc74c\n

Overwite Option :Update()

:Render \uc640 :AfterRender \ub97c \ub2e4\uc2dc \uc2e4\ud589\ud558\uace0, \uc774\uc804\uc5d0 \uc788\ub358 \uc790\uc2dd\ub4e4\uc744 \ub2e4\uc2dc \ub04c\uc5b4\uc635\ub2c8\ub2e4. \uc774\uc804\uc758 Render \uacb0\uacfc\ub294 \uc81c\uac70\ub429\ub2c8\ub2e4

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\nlocal count = 0\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    print(\"Rendering!\")\n    count = count + 1\n    return TextButton {\n        self \"_button\";\n        Name = tostring(count);\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button.Name)\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton:Update() -- update\nmyButton:Update() -- update\nmyButton:Update() -- update\n

Overwite Option .Getter.<PropertyName>(self)

\uac12\uc744 \uc5bb\ub294\ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {}\nend\n-- \uac12\uc744 \uc77d\ub294\ub370 \uc0ac\uc6a9\ud560 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4\nfunction myClass.Getter.Test(self)\n    return \"Hello World\"\nend\n\nlocal myImported = Class(myClass)\nprint(myImported().Test)\n

Overwite Option .Setter.<PropertyName>(self,newValue:any)

\uac12\uc744 \uc124\uc815\ud558\ub294\ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_button\";\n        Text = \"wow\";\n    }\nend\n-- \uac12\uc744 \uc9c0\uc815\ud558\ub294\ub370 \uc0ac\uc6a9\ud560 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4\nfunction myClass.Setter.Test(self,newValue)\n    self._button.Text = newValue\nend\nfunction myClass.Getter.Test(self)\n    return self._button.Text\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nprint(myButton.Test)\nmyButton.Test = \"Hello World\"\nprint(myButton.Test)\n

Overwite Option .UpdateTriggers.<PropertyName> = boolean?

\ud574\ub2f9 \uac12\uc744 \ubcc0\uacbd\ud558\uba74 Update \uac00 \uc218\ud589\ub420\uc9c0 \uc5ec\ubd80\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\nlocal count = 0\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    print(\"Rendering!\")\n    count = count + 1\n    return TextButton {\n        self \"_button\";\n        Name = tostring(count);\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button.Name)\nend\n-- \uac12 \ubcc0\uacbd\uc2dc \uc5c5\ub370\uc774\ud2b8 \uc5ec\ubd80\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4\nmyClass.UpdateTriggers.Test = true\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton.Test = 1 -- update\nmyButton.Test = 1 -- update\nmyButton.Test = 1 -- update\n

Overwite Option :Unload(object)

:Destroy \uac00 \ud638\ucd9c\ub420 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ub530\ub85c \uc120\uc5b8\ud558\uc9c0 \uc54a\uc544\ub3c4 \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. object \ub294 :Render \uac00 \ubc18\ud658\ud55c \uac12\uc785\ub2c8\ub2e4

:GetPropertyChangedSignal(propertyName:string)->Bindable

\uac12 \ubcc0\uacbd\uc744 \uc5f0\uacb0\ud560 \uc218 \uc788\ub294 Bindable\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. :EmitPropertyChangedSignal \uc73c\ub85c \uc774 \uc2dc\uadf8\ub110\uc744 \uc791\ub3d9\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud3b8\uc758\uc0c1 \uc774 \uc2dc\uadf8\ub110\uc774 \uc791\ub3d9\ud560 \ub54c, \uc0c8\ub85c\uc6b4 \uac12\uc774 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

:EmitPropertyChangedSignal(propertyName:string,changedValue:any?)

\ud504\ub85c\ud37c\ud2f0 \ubcc0\uacbd\uc2dc :GetPropertyChangedSignal \uc5d0 \ub4f1\ub85d\ub41c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \uc774 \ud568\uc218\ub97c \ud638\ucd9c\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c self.a = 1 \uacfc \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \ubc14\ub85c \uac12\uc744 \uc124\uc815\ud558\ub294 \uacbd\uc6b0 \uc790\ub3d9\uc801\uc73c\ub85c \uc774 \ud568\uc218\uac00 \uc2e4\ud589\ub418\uc9c0\ub9cc, \ud14d\uc2a4\ud2b8 \ubc15\uc2a4\uc758 \ud14d\uc2a4\ud2b8 \ucc98\ub7fc \uac1d\uccb4\uc758 \ubcc0\uacbd\uc0ac\ud56d\uc744 \uc5f0\ub3d9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0 \uc774 \ud568\uc218\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. changedValue \ub294 \uc120\ud0dd\uc0ac\ud56d\uc774\uba70, \uc8fc\uc5b4\uc9c0\uc9c0 \uc54a\uc73c\uba74 self[propertyName]\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_box\";\n        Text = \"test\";\n        Size = UDim2.fromOffset(200,200);\n        [Evnet.Prop \"Text\"] = function (this,newValue)\n            self:EmitPropertyChangedSignal(\"Text\",newValue)\n        end;\n        -- [Evnet.Prop \"Text\"] = self \"Text\" \uc640 \ub3d9\uc77c\ud569\ub2c8\ub2e4.\n        -- self(name:string) \ubb38\ubc95\uc73c\ub85c \ubcc0\uacbd \uc774\ubca4\ud2b8 \uc5ed\uc2dc \ub9c1\ud06c\n        -- \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n    }\nend\nfunction myClass.Getter.Text(self)\n    return self._box.Text\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton:GetPropertyChangedSignal(\"Text\"):Connect(function()\n    print(myButton.Text)\nend)\nMount(ScreenGUI, myButton)\n

Event .ChildAdded:Connect((child)->())->Connection

\uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uac00 \ucd94\uac00\ub420 \ub54c \ubc1c\uc0dd\ud558\ub294 \uc774\ubca4\ud2b8\uc785\ub2c8\ub2e4. :Init \ub610\ub294 :AfterRender \uc5d0\uc11c \uc0ac\uc6a9\ud558\uba74 \uc635\uc158\uc73c\ub85c \ub123\uc740 \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uac00 \uc774 \uc774\ubca4\ud2b8\ub97c \ud1b5\ud574 \uc5bb\uc5b4\uc9c8 \uc218 \uc788\uc73c\uba70, \ucd94\ud6c4 Mount \ub97c \ud1b5\ud574 \ucd94\uac00\ub418\ub294 \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8 \ub610\ud55c \uc774 \uc774\ubca4\ud2b8\ub85c \uc5bb\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_holder\";\n    }\nend\nfunction myClass:AfterRender()\n    self.ChildAdded:Connect(function(child)\n        print(child.Name)\n    end)\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported{\n    -- Init \uc5d0 ChildAdded \ub97c \ub123\uc740\uac83\uc774 \uc544\ub2c8\uae30 \ub54c\ubb38\uc5d0 \ucd9c\ub825\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n    -- \uadf8\ub7ec\ub098 AfterRender \uc5d0 :GetChildren \uc744 \ub123\uc5b4 \uc774 \uc624\ube0c\uc81d\ud2b8\ub97c\n    -- \uc5bb\uc5b4\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n    TextButton { Name = \"Hello \"};\n}\n\nMount(myButton, TextButton{ Name = \"Hello\" })\nMount(myButton, TextButton{ Name = \"World\" })\n

:GetChildren()

\uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \uac00\uc838\uc624\ub294 \ud568\uc218\uc785\ub2c8\ub2e4. :Init() \uc640 :AfterRender() \uc5d0\uc11c\ub294 \ube48 \ud14c\uc774\ube14\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \uc790\uc2dd\uc758 \uc21c\uc11c\ub294 \uc77c\uc815\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_holder\";\n    }\nend\nfunction myClass:AfterRender()\n    for i,v in ipairs(self:GetChildren()) do\n        print(v.Name)\n    end\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported{\n    TextButton { Name = \"Hello World\"};\n}\n\n-- \ub098\uc911\uc5d0 \ucd94\uac00\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub294 \ucd9c\ub825\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\nMount(myButton, TextButton{ Name = \"Hello\" })\nMount(myButton, TextButton{ Name = \"World\" })\n

"},{"location":"reference/lang/","title":"Lang","text":"

Lang.FailedMessage:string

\uc544\ubb34\ub7f0 \ubc88\uc5ed \uac12\ub3c4 \uc5bb\uc5b4\uc624\uc9c0 \ubabb\ud558\uc600\uc744\ub54c \ubcf4\uc5ec\uc904 \ubb38\uc790\uc5f4\uc785\ub2c8\ub2e4. \ubcc0\uacbd\uc2dc \uc790\ub3d9\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\uac00 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.

Lang.CurrentLocale:Locale<item of Lang.Locales>

\ud604\uc81c \uc0ac\uc6a9\uc911\uc778 \uc5b8\uc5b4\uc785\ub2c8\ub2e4. \ubcc0\uacbd\uc2dc \uc790\ub3d9\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\uac00 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4. Lang.Locales \uc548\uc758 \uac12\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.

"},{"location":"reference/lang/#langlocales","title":"Lang.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":"reference/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":"reference/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":"reference/signal/","title":"Signal","text":"

Signal.Bindable.New(id:string)->Bindable

\uc0c8\ub85c\uc6b4 Bindable \uc744 \uc0dd\uc131\ud558\uac70\ub098 \uc774\uc804\uc758 Bindable \uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

Signal.Disconnecter.New(id:string)->Disconnecter

\uc0c8\ub85c\uc6b4 Disconnecter \uc744 \uc0dd\uc131\ud558\uac70\ub098 \uc774\uc804\uc758 Disconnecter \uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

"},{"location":"reference/signal/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":"reference/signal/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":"reference/store/","title":"Store","text":"

Store.GetStore(id:string?)->store

\uac12\ub4e4\uc744 \uc800\uc7a5\ud558\uace0 \ub808\uc9c0\uc2a4\ud130\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\ub294 \uac12 \uc800\uc7a5\uc18c\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.

Store.GetObject(id:string)->Object?

\ud574\ub2f9 id \ub97c \uac00\uc9c4 \uc0dd\uc131\ub41c \uc624\ube0c\uc81d\ud2b8\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.

Store.GetObjects(id:string)->objectList?

\ud574\ub2f9 id \ub97c \uac00\uc9c4 \uc0dd\uc131\ub41c \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \ubc18\ud658\uc740 objectList \ud0c0\uc785\uc744 \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uace0\uae09 ID \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc790\uc138\ud55c \uc0ac\ud56d\uc740 \ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c\ub97c \ud655\uc778\ud558\uc138\uc694.

"},{"location":"reference/store/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":"reference/tween/","title":"Tween","text":"

Tween.RunTween(Item:any, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)->TweenHandler

\ud2b8\uc708\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4. \ud2b8\uc708 \uc635\uc158\uc5d0 \ub300\ud55c \uc815\ubcf4\ub294 TweenOptions \ubb38\uc11c\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Ended, OnStepped, Setter, Getter \uac12\uc774 \uc124\uc815\ub418\uba74 Option \uc548\uc758 \uac12\ubcf4\ub2e4 \uc6b0\uc120\uc801\uc73c\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uae30\ub2a5\uc740 TweenOptions\uc758 \ub0b4\uc6a9\uacfc \uac19\uc2b5\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ud2b8\uc708\uc744 \uc911\ub2e8\uc2dc\ud0ac \uc218 \uc788\ub3c4\ub85d TweenHandler \uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4. \ub2e4\ub978 \ud2b8\uc708\uc774 \ubcc0\uacbd\uc911\uc778 \uc18d\uc131\uc774 \ub2e4\uc2dc \ud2b8\uc708\ud558\ub3c4\ub85d \ud638\ucd9c\ub418\uba74, \uc774\uc804 \ud2b8\uc708\uc5d0\uc11c \ud574\ub2f9 \uc18d\uc131\uc740 \ud2b8\uc708\uc774 \uc911\ub2e8\ub418\uba70 \uc0c8\ub85c\uc6b4 \ud2b8\uc708\uc73c\ub85c \ub36e\uc5b4\uc4f0\uae30 \ub429\ub2c8\ub2e4.

Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n

Tween.RunTweens(Items:{[number]:any}, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)

Tween.RunTween \uc640 \uac19\uc73c\ub098 \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub97c \ud55c\uaebc\ubc88\uc5d0 \ud2b8\uc708\ud569\ub2c8\ub2e4. \uc544\ubb34\uac83\ub3c4 \ubc18\ud658\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4

Tween.RunTween({myFrame1, myFrame2, myFrame3},{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n

Tween.StopTween(ItemOrHandler:TweenHandler|any)

\ud2b8\uc708\uc744 \uba48\ucda5\ub2c8\ub2e4. TweenHandler \ub610\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\uc5b4 \uba48\ucd9c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\uc73c\uba74 \uadf8 \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc2e4\ud589\uc911\uc778 \ubaa8\ub4e0 \ud2b8\uc708\uc744 \uba48\ucda5\ub2c8\ub2e4.

TweenHandler \uc774\uc6a9\uc624\ube0c\uc81d\ud2b8 \uc774\uc6a9
local Handler = Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n\nTween.StopTween(Handler)\n
local Handler = Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n\nTween.StopTween(myFrame)\n

Tween.StopPropertyTween(Item:any, PropertyName:string)

\uc624\ube0c\uc81d\ud2b8\uc5d0 \ud2b9\uc815 \ud504\ub85c\ud37c\ud2f0\uc758 \ud2b8\uc708\uc744 \uc911\ub2e8\uc2dc\ud0b5\ub2c8\ub2e4. TweenHandler \ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Tween.StopPropertyTween(ItemOrHandler:IsTweening|any)->boolean

\ud574\ub2f9 \uc624\ube0c\uc81d\ud2b8 \ub610\ub294 TweenHandler \ub85c \ud2b8\uc708\uc774 \uc9c4\ud589\uc911\uc778\uc9c0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud569\ub2c8\ub2e4.

Tween.IsPropertyTweening(Item:any, PropertyName:string)

\ud574\ub2f9 \uc624\ube0c\uc81d\ud2b8\uc758 \ud504\ub85c\ud37c\ud2f0\uac00 \ud2b8\uc708\uc911\uc774\uc9c0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud569\ub2c8\ub2e4. TweenHandler \ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Tween.Easings: { [string]: EasingFunction }

\uc774\uc9d5 \ud568\uc218\ub4e4\uc774 \ub2f4\uaca8\uc788\uc2b5\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
\uadf8\ub798\ud504\uc640 \ubbf8\ub9ac\ubcf4\uae30\ub294 Easings \uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

Tween.Easings: { [string]: EasingFunction }

\uc774\uc9d5 \ud568\uc218\ub4e4\uc774 \ub2f4\uaca8\uc788\uc2b5\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
\uc790\uc138\ud55c \uc815\ubcf4\ub294 Easings \uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

"},{"location":"reference/tween/directions/","title":"Tween.Directions","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":"reference/tween/easings/","title":"Tween.Easings","text":"\ubbf8\ub9ac\ubcf4\uae30\uadf8\ub798\ud504 \uac1c\ud615

\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":"reference/tween/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":"tutorial/","title":"Getting Started","text":"

\uc2e4\ud5d8\uc801\uc778 \ubaa8\ub4c8

\uc774 \ubaa8\ub4c8\uc740 \uc5c5\ub370\uc774\ud2b8\uac00 \ube48\ubc88\ud569\ub2c8\ub2e4! \ud56d\uc0c1 Github \ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694!

"},{"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!

\ubcc0\uacbd \uc0ac\ud56d\uc740 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

"},{"location":"tutorial/#_2","title":"\uc124\uce58","text":"

3\uac00\uc9c0 \ubc29\ubc95\uc911 \uac00\uc7a5 \ud3b8\ud55c \ubc29\ubc95\uc744 \uc120\ud0dd\ud574 \ubaa8\ub4c8\uc744 \uc124\uce58\ud574\uc8fc\uc138\uc694.

"},{"location":"tutorial/#rbxmx","title":"\ub4dc\ub808\uadf8 \uc5d4 \ub4dc\ub86d / rbxmx \ud30c\uc77c","text":"

\ub4dc\ub808\uadf8\ud574 \uc2a4\ud29c\ub514\uc624\uc5d0 \ub123\uc744 \uc218 \uc788\ub294 \ubaa8\ub4c8 \ud30c\uc77c\uc785\ub2c8\ub2e4.

RBXMX \ub2e4\uc6b4\ub85c\ub4dc

\ub2e4\uc6b4\ub85c\ub4dc\ud574 \uc2a4\ud29c\ub514\uc624\uc5d0 \uc62e\uaca8\uc8fc\uc138\uc694.

"},{"location":"tutorial/#git-clone","title":"git clone","text":"

rojo \ub97c \uc0ac\uc6a9\ud574 \ube4c\ub4dc\ud558\ub294 \ubc29\ubc95\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4\uba74 Quad \ub97c \uc9c1\uc811 \ube4c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

git clone https://github.com/qwreey75/Quad Quad\ncd Quad\nmake build\n

\uc708\ub3c4\uc6b0\uc758 \uacbd\uc6b0 make build \ub300\uc2e0 rojo build default.project.json -o output.rbxmx \ub97c \uc785\ub825\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.

"},{"location":"tutorial/#git-submodule","title":"git submodule","text":"

\ud504\ub85c\uc81d\ud2b8\uac00 rojo \ub97c \uc0ac\uc6a9\ud558\uace0 git \uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 submodule \ub85c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

# \uc774\ubbf8 submodule \uc744 \uc0ac\uc6a9\ud558\uace0 \uc788\ub294 \uacbd\uc6b0 \uc785\ub825\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4\ngit submodule init\n# \uc11c\ube0c\ubaa8\ub4c8\uc758 \ub8e8\ud2b8\ub294 \uc9c1\uc811 \uc815\ud574\uc8fc\uc138\uc694\ngit submodule add https://github.com/qwreey75/Quad Quad\n
"},{"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 \uac19\uc740\uac83\ub4e4\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":"\ucd94\uac00\uc801 \ud658\uacbd \uc124\uc815","text":""},{"location":"tutorial/#_5","title":"\ud0c0\uc785 \ubd88\ub7ec\uc624\uae30","text":"

\uae30\ubcf8\uc801\uc73c\ub85c Quad \ub294 \ub85c\ub4dc\uc2dc \ud0c0\uc785 \uac19\uc774 \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 = require(path.to.module.types)\nlocal Quad = (require(path.to.module)::types.module).Init()\n
"},{"location":"tutorial/#_6","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

\ud3b8\uc758\uc0c1\uc744 \uc704\ud574 \uc790\ub3d9 \ub9ac\ub85c\ub4dc\ub97c \uc124\uc815\ud574 \uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

\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. \ud504\ub85c\uc81d\ud2b8\uac00 \ub9e4\uc6b0 \uac70\ub300\ud558\uc9c0 \uc54a\ub2e4\uba74 \ud06c\uac8c \uac71\uc815\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub429\ub2c8\ub2e4.

\ub2e4\uc74c\uacfc \uac19\uc740 \ucf54\ub4dc\ud2b8\ub9ac\ub97c \ub9cc\ub4e4\uc5b4\uc8fc\uc138\uc694.

 | Main (ModuleScript)\n |-- Loader (LocalScript)\n |-- Test (ModuleScript)\n
MainLoaderTest \uc2e4\uc81c\ub85c UI \ub4e4\uc744 \uadf8\ub9ac\ub294 \ucf54\ub4dc\ub4e4\uc774 \ub2f4\uae41\ub2c8\ub2e4.
local Quad = require(path.to.module).Init()\nlocal IsTestMode = script.Name:match(\"_TESTING\") -- \ud14c\uc2a4\ud2b8\ubaa8\ub4dc \uc5ec\ubd80\nlocal LocalPlayer = game.Players.LocalPlayer\nlocal ScreenGUI = Instance.new(\"ScreenGui\",\n    LocalPlayer and LocalPlayer.PlayerGui or game.StarterGui)\nScreenGUI.Name = \"MyGUI\"\nScreenGUI.ResetOnSpawn = false\n\n-- \uc2e4\uc81c \uadf8\ub9ac\ub294 \ucf54\ub4dc\ub4e4\uc774 \ub4e4\uc5b4\uac11\ub2c8\ub2e4.\n\nreturn function()\n    -- \ud14c\uc2a4\ud2b8\uac00 \ub05d\ub098 \ub9cc\ub4e0\uac78 \uc9c0\uc6cc\uc57c \ud560 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4.\n    -- \ucd94\ud6c4 \uc124\uba85\ub420 Unmount() \ub97c \uc774\uc6a9\ud558\uc138\uc694.\n    ScreenGUI:Destroy()\nend\n
\uac8c\uc784\uc744 \ud50c\ub808\uc774 \ud560 \ub54c \ucf54\ub4dc\uac00 \ub85c\ub4dc\ub420 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4dc\ub294 \ub85c\ub354\uc785\ub2c8\ub2e4.
require(script.Parent)\n
\uba85\ub839\ucc3d\uc5d0\uc11c \uba85\ub839\uc5b4 \uc785\ub825\uc73c\ub85c \ud14c\uc2a4\ud2b8\ub97c \uc2e4\ud589 \ud560 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4dc\ub294 \ucf54\ub4dc\ub4e4\uc774 \ub2f4\uae41\ub2c8\ub2e4.
-- \ubaa8\ub4c8 \uc704\uce58\ub85c \uc54c\ub9de\uac8c \ubcc0\uacbd\ud574\uc8fc\uc138\uc694\nlocal Quad = path.to.module\nlocal tracker = require(Quad.tracker)\n\nlocal module = {}\nlocal function reload()\n    if module.unload then pcall(module.unload) end\n    if module.testingModule then pcall(module.testingModule.Destroy,module.testingModule) end\n    module.testingModule = script.Parent:Clone()\n    module.testingModule.Parent = script.Parent.Parent\n    module.testingModule.Archivable = false\n    module.testingModule.Name = module.testingModule.Name .. \"_TESTING\"\n    module.unload = require(module.testingModule)\nend\n\n-- \uc790\ub3d9 \ub9ac\ub85c\ub4dc\ub97c \ucf2d\ub2c8\ub2e4. \uc774\ubbf8 \ucf1c\uc838\uc788\uc73c\uba74 \ub2e4\uc2dc \ub85c\ub4dc\ud569\ub2c8\ub2e4\nfunction module.load()\n    reload()\n    if not module.autoreload then\n        module.autoreload = tracker.new(script.Parent)\n        module.autoreload:init(); wait()\n        module.autoreload:connect(\"updated\",reload)\n    end\nend\n\n-- \uc790\ub3d9 \ub9ac\ub85c\ub4dc\ub97c \ub044\uace0 \ud14c\uc2a4\ud2b8\ub85c \uc0dd\uae34\uac83\uc744 \uc9c0\uc6c1\ub2c8\ub2e4\nfunction module.unload()\n    if module.autoreload then pcall(module.autoreload.deinit,module.autoreload) end\n    if module.unload then pcall(module.unload) end\n    if module.testingModule then pcall(module.testingModule.Destroy,module.testingModule) end\n    module.autoreload = nil\n    module.unload = nil\n    module.testingModule = nil\nend\n\nreturn module\n

\uc774\uc81c \uba85\ub839\uc5b4 \ucc3d\uc5d0\uc11c \uc790\ub3d9 \ub9ac\ub85c\ub4dc\ub97c \ucf1c\uac70\ub098 \ub04c \uc218 \uc788\uc2b5\ub2c8\ub2e4. rojo \ub098 \ud3b8\uc9d1\uae30\ub85c \uc778\ud574 \ucf54\ub4dc\uac00 \ubcc0\uacbd\ub418\uba74 \uc790\ub3d9\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4!

require(path.to.your.module).load()\n
"},{"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/#extend","title":"Extend \ub780?","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.

  1. \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.
  2. \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.
  3. \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.
  4. \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.
  5. \ub9e4\uc6b0 \uc720\uc5f0\ud569\ub2c8\ub2e4. \ub2e4\uc591\ud55c \ubc29\ubc95\uc758 \uad6c\ud604\ubc95\uc744 \uc6d0\ud558\ub294\ub300\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
"},{"location":"tutorial/11_extend/#_1","title":"\ub098\ub9cc\uc758 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uae30","text":"

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. \uc544\ub798\uc758 \ucf54\ub4dc\ub294 \ubaa8\ub4e0 Extend \ubb38\ubc95\uc744 \uc124\uba85\ud569\ub2c8\ub2e4.

 - ScreenGUI\n |-- localscript\n    |-- myClass (ModuleScript)\n

localscriptlocalscript.myClass Extend \ud074\ub798\uc2a4\ub97c \ubd88\ub7ec\uc624\uace0 \uc0ac\uc6a9\ud569\ub2c8\ub2e4
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    -- \uc774 \ud14c\uc774\ube14\uc740 \ubaa8\ub4c8\uc758 :Init(props) \uc5d0 \uc81c\uacf5\ub429\ub2c8\ub2e4.\n    -- :Render(props) \uc5d0\ub3c4 \uc774 \ud14c\uc774\ube14\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.\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\n-- main.Testing = 2\n-- \uc5c5\ub370\uc774\ud2b8 \ud2b8\ub9ac\uac70\uc774\ubbc0\ub85c \uc774 \uac12\uc744 \ubcc0\uacbd\ud558\uba74.\n-- main:Update() \uc640 \uac19\uc740 \ud6a8\uacfc\uac00 \ub0a9\ub2c8\ub2e4.\n
Extend \ud074\ub798\uc2a4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \ub2e4\ub978\uacf3\uc5d0\uc11c \ubd88\ub7ec\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
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 \ub294 Render \uc804 props \ub97c \ucd08\uae30\ud654 \ud558\ub294 \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4\n-- Init \uc5d0\ub294 \ud504\ub85c\ud37c\ud2f0 \ub9ac\uc2a4\ud2b8\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4. 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\")\n    props:Default(\"ZIndex\", 1)\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:Render(props)\n    return TextLabel {\n        Size = UDim2.fromOffset(200,200);\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        -- _holder \ub294 \uc608\uc57d\ub41c \uac12\uc785\ub2c8\ub2e4. \uc790\uc2dd\ub4e4\uc774 \uc5ec\uae30\uc5d0 \ub4e4\uc5b4\uc640\uc57c\n        -- \ud568\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4. \ub9ac\uc2a4\ud2b8\ub098 \uadf8\ub9ac\ub4dc\uac00 \uc788\ub294 \uacbd\uc6b0 \uc720\uc6a9\ud569\ub2c8\ub2e4.\n        -- \ub530\ub85c \uc124\uc815\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0 Render \uac00 \ub9ac\ud134\ud55c \uac12\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.\n        self \"_holder\";\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\":Tween();\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        ZIndex = props \"ZIndex\";\n        -- ... \uc790\uc2dd\uc744 \ub123\uc5b4\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.\n        -- Frame {\n        --    [Event.Created] = function(self)\n        --        print(self.Parent) -- nil \uc77c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4\n        --        \ub530\ub77c\uc11c \ubd80\ubaa8\ub97c \uac74\ub4e4\uc5ec\uc57c \ud558\ub294 \uacbd\uc6b0, self \"\" \ub97c \ud1b5\ud574\n        --        self \uac12\uc5d0 \ub123\uc5b4\ub193\uace0 \ub098\uc911\uc5d0 AfterRender \ub85c \ud574\uacb0\ud574\uc57c\ud569\ub2c8\ub2e4.\n        --    end;\n        -- }\n    }\nend\n\n\n-- AfterRender \ub294 Render \uc9c1\ud6c4 \uc2e4\ud589\ub429\ub2c8\ub2e4.\n-- \ub80c\ub354\ub9c1 \ud6c4 \uc2e4\ud589\ud574\uc57c \ud560 \uac83\uc744 \ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n-- object \ub294 :Render \uac00 \ubc18\ud658\ud55c \uac12\uc785\ub2c8\ub2e4.\n-- AfterRender \ub294 \uc5c6\ub354\ub77c\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.\nfunction myClass:AfterRender(object)\n    print(self._label,\"\uc774 \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n    -- \uc774\ub807\uac8c \ud558\uba74 \ub808\uc9c0\uc2a4\ud130\ub85c \uc5f0\uacb0\ub41c \ubd80\ubd84\ub3c4 \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4.\n    self.ZIndex = 2\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/11_extend/#extend_1","title":"Extend","text":"

Extend \uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uac12\ub4e4\uacfc \uba54\uc18c\ub4dc\uc785\ub2c8\ub2e4.

self(name:string)->linker

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.

Overwite 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 \ub9cc\ub4dc\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.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Event = Quad.Event\nlocal Mount = Quad.Mount\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        [Event \"MouseButton1Click\"] = function (self,x,y)\n            print((\"\ubc84\ud2bc\uc774 %d,%d \uc5d0\uc11c \ub20c\ub838\uc2b5\ub2c8\ub2e4\"):format(x,y))\n        end;\n        Size = props \"Size\";\n        Text = props \"Text\"; -- \ub808\uc9c0\uc2a4\ud130\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4\n    }\nend\n\nlocal myImported = Class(myClass)\nmyImported.Size = UDim2.fromOffset(200,200)\n\nlocal test = myImported {\n    Text = \"wow\"\n}\nMount(ScreenGUI, test)\n\n-- \ud14d\uc2a4\ud2b8\ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4\nwhile task.wait(1) do\n    test.Text = \"w\"..(\"o\"):rep(#test.Text-1)..\"w\"\nend\n

Overwite Option :Init(props:valueStore)

\uc120\ud0dd\uc801\uc778 \uba54\uc18c\ub4dc\ub85c, Render \uac00 \uc218\ud589 \ub418\uae30 \uc804\uc5d0 \ubbf8\ub9ac props \uac12\uc744 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Init(props)\n    -- Size \uac12\uc774 \uc5c6\ub2e4\uba74 \uae30\ubcf8\uac12\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4.\n    props:Default(\"Size\", UDim2.fromOffset(100,100))\n\n    -- \uc55e\uc5d0 _ \ub97c \ubd87\uc5ec \ub0b4\ubd80 \ubcc0\uc218\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.\n    -- \uc5b4\ub514\uc5d0\uc11c\ub098 \uc4f0\uc77c \uc218 \uc788\uc73c\uba70 register \uc5d0 \uc601\ud5a5\uc8fc\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n    self._asdf = true\nend\nfunction myClass:Render(props)\n    return TextButton {\n        props \"Size\"\n    }\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported() -- \uc635\uc158 \uc5c6\uc74c\nprint(myButton.Size)\n

Overwite Option :AfterRender(object:any)

\uc120\ud0dd\uc801\uc778 \uba54\uc18c\ub4dc\ub85c, Render \uac00 \uc218\ud589 \ub41c \ud6c4 \ud560 \uc791\uc5c5\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uc778\uc790\ub85c Render \uac00 \ubc18\ud658\ud55c \uac12\uc774 \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_button\"; -- \uc790\uae30 \uc790\uc2e0\uc5d0 \uc774 \ubc84\ud2bc\uc744 \ub123\uc2b5\ub2c8\ub2e4\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button == object) -- true\nend\n\nlocal myImported = Class(myClass)\nmyImported() -- \uc635\uc158 \uc5c6\uc74c\n

Overwite Option :Update()

:Render \uc640 :AfterRender \ub97c \ub2e4\uc2dc \uc2e4\ud589\ud558\uace0, \uc774\uc804\uc5d0 \uc788\ub358 \uc790\uc2dd\ub4e4\uc744 \ub2e4\uc2dc \ub04c\uc5b4\uc635\ub2c8\ub2e4. \uc774\uc804\uc758 Render \uacb0\uacfc\ub294 \uc81c\uac70\ub429\ub2c8\ub2e4

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\nlocal count = 0\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    print(\"Rendering!\")\n    count = count + 1\n    return TextButton {\n        self \"_button\";\n        Name = tostring(count);\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button.Name)\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton:Update() -- update\nmyButton:Update() -- update\nmyButton:Update() -- update\n

Overwite Option .Getter.<PropertyName>(self)

\uac12\uc744 \uc5bb\ub294\ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {}\nend\n-- \uac12\uc744 \uc77d\ub294\ub370 \uc0ac\uc6a9\ud560 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4\nfunction myClass.Getter.Test(self)\n    return \"Hello World\"\nend\n\nlocal myImported = Class(myClass)\nprint(myImported().Test)\n

Overwite Option .Setter.<PropertyName>(self,newValue:any)

\uac12\uc744 \uc124\uc815\ud558\ub294\ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_button\";\n        Text = \"wow\";\n    }\nend\n-- \uac12\uc744 \uc9c0\uc815\ud558\ub294\ub370 \uc0ac\uc6a9\ud560 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4\nfunction myClass.Setter.Test(self,newValue)\n    self._button.Text = newValue\nend\nfunction myClass.Getter.Test(self)\n    return self._button.Text\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nprint(myButton.Test)\nmyButton.Test = \"Hello World\"\nprint(myButton.Test)\n

Overwite Option .UpdateTriggers.<PropertyName> = boolean?

\ud574\ub2f9 \uac12\uc744 \ubcc0\uacbd\ud558\uba74 Update \uac00 \uc218\ud589\ub420\uc9c0 \uc5ec\ubd80\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\nlocal count = 0\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    print(\"Rendering!\")\n    count = count + 1\n    return TextButton {\n        self \"_button\";\n        Name = tostring(count);\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button.Name)\nend\n-- \uac12 \ubcc0\uacbd\uc2dc \uc5c5\ub370\uc774\ud2b8 \uc5ec\ubd80\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4\nmyClass.UpdateTriggers.Test = true\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton.Test = 1 -- update\nmyButton.Test = 1 -- update\nmyButton.Test = 1 -- update\n

Overwite Option :Unload(object)

:Destroy \uac00 \ud638\ucd9c\ub420 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ub530\ub85c \uc120\uc5b8\ud558\uc9c0 \uc54a\uc544\ub3c4 \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. object \ub294 :Render \uac00 \ubc18\ud658\ud55c \uac12\uc785\ub2c8\ub2e4

:GetPropertyChangedSignal(propertyName:string)->Bindable

\uac12 \ubcc0\uacbd\uc744 \uc5f0\uacb0\ud560 \uc218 \uc788\ub294 Bindable\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. :EmitPropertyChangedSignal \uc73c\ub85c \uc774 \uc2dc\uadf8\ub110\uc744 \uc791\ub3d9\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud3b8\uc758\uc0c1 \uc774 \uc2dc\uadf8\ub110\uc774 \uc791\ub3d9\ud560 \ub54c, \uc0c8\ub85c\uc6b4 \uac12\uc774 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

:EmitPropertyChangedSignal(propertyName:string,changedValue:any?)

\ud504\ub85c\ud37c\ud2f0 \ubcc0\uacbd\uc2dc :GetPropertyChangedSignal \uc5d0 \ub4f1\ub85d\ub41c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \uc774 \ud568\uc218\ub97c \ud638\ucd9c\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c self.a = 1 \uacfc \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \ubc14\ub85c \uac12\uc744 \uc124\uc815\ud558\ub294 \uacbd\uc6b0 \uc790\ub3d9\uc801\uc73c\ub85c \uc774 \ud568\uc218\uac00 \uc2e4\ud589\ub418\uc9c0\ub9cc, \ud14d\uc2a4\ud2b8 \ubc15\uc2a4\uc758 \ud14d\uc2a4\ud2b8 \ucc98\ub7fc \uac1d\uccb4\uc758 \ubcc0\uacbd\uc0ac\ud56d\uc744 \uc5f0\ub3d9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0 \uc774 \ud568\uc218\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. changedValue \ub294 \uc120\ud0dd\uc0ac\ud56d\uc774\uba70, \uc8fc\uc5b4\uc9c0\uc9c0 \uc54a\uc73c\uba74 self[propertyName]\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_box\";\n        Text = \"test\";\n        Size = UDim2.fromOffset(200,200);\n        [Evnet.Prop \"Text\"] = function (this,newValue)\n            self:EmitPropertyChangedSignal(\"Text\",newValue)\n        end;\n        -- [Evnet.Prop \"Text\"] = self \"Text\" \uc640 \ub3d9\uc77c\ud569\ub2c8\ub2e4.\n        -- self(name:string) \ubb38\ubc95\uc73c\ub85c \ubcc0\uacbd \uc774\ubca4\ud2b8 \uc5ed\uc2dc \ub9c1\ud06c\n        -- \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n    }\nend\nfunction myClass.Getter.Text(self)\n    return self._box.Text\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton:GetPropertyChangedSignal(\"Text\"):Connect(function()\n    print(myButton.Text)\nend)\nMount(ScreenGUI, myButton)\n

Event .ChildAdded:Connect((child)->())->Connection

\uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uac00 \ucd94\uac00\ub420 \ub54c \ubc1c\uc0dd\ud558\ub294 \uc774\ubca4\ud2b8\uc785\ub2c8\ub2e4. :Init \ub610\ub294 :AfterRender \uc5d0\uc11c \uc0ac\uc6a9\ud558\uba74 \uc635\uc158\uc73c\ub85c \ub123\uc740 \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uac00 \uc774 \uc774\ubca4\ud2b8\ub97c \ud1b5\ud574 \uc5bb\uc5b4\uc9c8 \uc218 \uc788\uc73c\uba70, \ucd94\ud6c4 Mount \ub97c \ud1b5\ud574 \ucd94\uac00\ub418\ub294 \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8 \ub610\ud55c \uc774 \uc774\ubca4\ud2b8\ub85c \uc5bb\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_holder\";\n    }\nend\nfunction myClass:AfterRender()\n    self.ChildAdded:Connect(function(child)\n        print(child.Name)\n    end)\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported{\n    -- Init \uc5d0 ChildAdded \ub97c \ub123\uc740\uac83\uc774 \uc544\ub2c8\uae30 \ub54c\ubb38\uc5d0 \ucd9c\ub825\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n    -- \uadf8\ub7ec\ub098 AfterRender \uc5d0 :GetChildren \uc744 \ub123\uc5b4 \uc774 \uc624\ube0c\uc81d\ud2b8\ub97c\n    -- \uc5bb\uc5b4\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n    TextButton { Name = \"Hello \"};\n}\n\nMount(myButton, TextButton{ Name = \"Hello\" })\nMount(myButton, TextButton{ Name = \"World\" })\n

:GetChildren()

\uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \uac00\uc838\uc624\ub294 \ud568\uc218\uc785\ub2c8\ub2e4. :Init() \uc640 :AfterRender() \uc5d0\uc11c\ub294 \ube48 \ud14c\uc774\ube14\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \uc790\uc2dd\uc758 \uc21c\uc11c\ub294 \uc77c\uc815\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_holder\";\n    }\nend\nfunction myClass:AfterRender()\n    for i,v in ipairs(self:GetChildren()) do\n        print(v.Name)\n    end\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported{\n    TextButton { Name = \"Hello World\"};\n}\n\n-- \ub098\uc911\uc5d0 \ucd94\uac00\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub294 \ucd9c\ub825\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\nMount(myButton, TextButton{ Name = \"Hello\" })\nMount(myButton, TextButton{ Name = \"World\" })\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

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 "},{"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. Tween \uc548\uc758 \ubaa8\ub4e0 \ud568\uc218\uc640 \uac12\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.

Tween.RunTween(Item:any, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)->TweenHandler

\ud2b8\uc708\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4. \ud2b8\uc708 \uc635\uc158\uc5d0 \ub300\ud55c \uc815\ubcf4\ub294 TweenOptions \ubb38\uc11c\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Ended, OnStepped, Setter, Getter \uac12\uc774 \uc124\uc815\ub418\uba74 Option \uc548\uc758 \uac12\ubcf4\ub2e4 \uc6b0\uc120\uc801\uc73c\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uae30\ub2a5\uc740 TweenOptions\uc758 \ub0b4\uc6a9\uacfc \uac19\uc2b5\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ud2b8\uc708\uc744 \uc911\ub2e8\uc2dc\ud0ac \uc218 \uc788\ub3c4\ub85d TweenHandler \uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4. \ub2e4\ub978 \ud2b8\uc708\uc774 \ubcc0\uacbd\uc911\uc778 \uc18d\uc131\uc774 \ub2e4\uc2dc \ud2b8\uc708\ud558\ub3c4\ub85d \ud638\ucd9c\ub418\uba74, \uc774\uc804 \ud2b8\uc708\uc5d0\uc11c \ud574\ub2f9 \uc18d\uc131\uc740 \ud2b8\uc708\uc774 \uc911\ub2e8\ub418\uba70 \uc0c8\ub85c\uc6b4 \ud2b8\uc708\uc73c\ub85c \ub36e\uc5b4\uc4f0\uae30 \ub429\ub2c8\ub2e4.

Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n

Tween.RunTweens(Items:{[number]:any}, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)

Tween.RunTween \uc640 \uac19\uc73c\ub098 \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub97c \ud55c\uaebc\ubc88\uc5d0 \ud2b8\uc708\ud569\ub2c8\ub2e4. \uc544\ubb34\uac83\ub3c4 \ubc18\ud658\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4

Tween.RunTween({myFrame1, myFrame2, myFrame3},{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n

Tween.StopTween(ItemOrHandler:TweenHandler|any)

\ud2b8\uc708\uc744 \uba48\ucda5\ub2c8\ub2e4. TweenHandler \ub610\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\uc5b4 \uba48\ucd9c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\uc73c\uba74 \uadf8 \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc2e4\ud589\uc911\uc778 \ubaa8\ub4e0 \ud2b8\uc708\uc744 \uba48\ucda5\ub2c8\ub2e4.

TweenHandler \uc774\uc6a9\uc624\ube0c\uc81d\ud2b8 \uc774\uc6a9
local Handler = Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n\nTween.StopTween(Handler)\n
local Handler = Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n\nTween.StopTween(myFrame)\n

Tween.StopPropertyTween(Item:any, PropertyName:string)

\uc624\ube0c\uc81d\ud2b8\uc5d0 \ud2b9\uc815 \ud504\ub85c\ud37c\ud2f0\uc758 \ud2b8\uc708\uc744 \uc911\ub2e8\uc2dc\ud0b5\ub2c8\ub2e4. TweenHandler \ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Tween.StopPropertyTween(ItemOrHandler:IsTweening|any)->boolean

\ud574\ub2f9 \uc624\ube0c\uc81d\ud2b8 \ub610\ub294 TweenHandler \ub85c \ud2b8\uc708\uc774 \uc9c4\ud589\uc911\uc778\uc9c0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud569\ub2c8\ub2e4.

Tween.IsPropertyTweening(Item:any, PropertyName:string)

\ud574\ub2f9 \uc624\ube0c\uc81d\ud2b8\uc758 \ud504\ub85c\ud37c\ud2f0\uac00 \ud2b8\uc708\uc911\uc774\uc9c0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud569\ub2c8\ub2e4. TweenHandler \ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Tween.Easings: { [string]: EasingFunction }

\uc774\uc9d5 \ud568\uc218\ub4e4\uc774 \ub2f4\uaca8\uc788\uc2b5\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
\uadf8\ub798\ud504\uc640 \ubbf8\ub9ac\ubcf4\uae30\ub294 Easings \uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

Tween.Easings: { [string]: EasingFunction }

\uc774\uc9d5 \ud568\uc218\ub4e4\uc774 \ub2f4\uaca8\uc788\uc2b5\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
\uc790\uc138\ud55c \uc815\ubcf4\ub294 Easings \uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\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.

  1. 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.
  2. \uac00\ubcc0 \ud06c\uae30\uc758 UI \ub97c \uc5c5\ub370\uc774\ud2b8 \uc2dc\ud0a4\ub294 \uacbd\uc6b0.
  3. \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \ud55c\uaebc\ubc88\uc5d0 \ud2b8\uc708\uc2dc\ud0a4\ub294 \uacbd\uc6b0.
  4. \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
\uc8fc\uc758

\uad6c\ud604\uc758 \ubcf5\uc7a1\uc131\uc758 \uc774\uc720\ub85c \ub808\uc9c0\uc2a4\ud130\ub294 \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc\uc5d0\ub9cc \ub4f1\ub85d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local myFrame = Frame{}\nFrame.BackgroundColor3 = myStore \"color\"\n
\uc704\ucc98\ub7fc \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

local myFrame = Frame{}\nApply (myFrame) {\n    BackgroundColor3 = myStore \"color\";\n}\n
  1. \uc2a4\ud1a0\uc5b4\ub97c \uc0dd\uc131\ud568.
  2. \uae30\ubcf8 \uac12\uc744 \uc124\uc815\ud568.
  3. \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

: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)->register \ub85c UI \uc5d0 \uc801\uc6a9\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4.

Lang.Locales.Default \ub294 \uc77c\uce58\ud558\ub294 \uc5b8\uc5b4\uac00 \uc5c6\uc744\ub54c \ubcf4\uc5ec\uc904 \uc5b8\uc5b4\uc785\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c \uc601\uc5b4\ub97c \ucd94\ucc9c\ud569\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
Lang.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
\uc8fc\uc758

\uad6c\ud604\uc758 \ubcf5\uc7a1\uc131\uc758 \uc774\uc720\ub85c Lang \uc740 \ub808\uc9c0\uc2a4\ud130\uc640 \uac19\uc740 \uc81c\uc57d\uc744 \uac00\uc9d1\ub2c8\ub2e4 (\uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc\uc5d0\ub9cc \ub4f1\ub85d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4)

local myLabel = TextLabel{}\nLang.new(\"Test\",{ [Lang.Locales.Default] = \"{lang}\" })\nmyLabel.Text = Lang \"Test\" { lang = 1 }\n
\uc704\ucc98\ub7fc \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

\ub300\uc2e0\uc5d0 :Register \ubb38\ubc95\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub4f1\ub85d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local myLabel = TextLabel{}\nLang.new(\"Test\",{ [Lang.Locales.Default] = \"{lang}\" })\nApply (myLabel) {\n    Text = Lang \"Test\" { lang = 1 };\n}\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":"changelogs/","title":"\ubc84\uc804 \ubc88\uacbd\uc0ac\ud56d","text":""},{"location":"changelogs/#225","title":"2.25","text":"

\uc2e4\ud5d8\uc801 API \ub85c\uc368 GetChildren() \uacfc ChildAdded::Bindable \uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4.

"},{"location":"changelogs/#224","title":"2.24","text":"

\ubaa8\ub4e0 \ubb38\uc11c\uac00 \uc815\ub9ac\ub418\uc5c8\uc2b5\ub2c8\ub2e4.

"},{"location":"changelogs/#223","title":"2.23","text":"

\uac1d\uccb4 \uc0dd\uc131\uc2dc \uc77c\uc5b4\ub098\ub294 \uc624\ub958\ub97c \ud574\uacb0\ud588\uc2b5\ub2c8\ub2e4. \uc774\uc81c Extend \uac1d\uccb4 \ub0b4\ubd80 \uc790\uc2dd\uc774 Unmount \ub418\ub294 \uacbd\uc6b0 __child \uc5d0\uc11c \uc81c\uac70\ub429\ub2c8\ub2e4. types \uc758 \uc624\ud0c0\ub97c \uace0\ucce4\uc2b5\ub2c8\ub2e4.

"},{"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":"gallery/","title":"\uac24\ub7ec\ub9ac","text":"

\uc5ec\uae30\ub294 \uc5ec\ub7ec\ubd84\ub4e4\uc758 \uc791\ud488\uc744 \uc62c\ub824\ubcfc \uc218 \uc788\ub294 \uacf3\uc785\ub2c8\ub2e4! Quad \ub97c \uc0ac\uc6a9\ud55c \uc5ec\ub7ec\uac00\uc9c0 \ud6cc\ub96d\ud55c \uc791\ud488\ub4e4\uc744 \ubcf4\uc5ec\uc8fc\uc138\uc694!

"},{"location":"license/","title":"\ub77c\uc774\uc120\uc2a4","text":"

QwreeyKawaii License v1.3

KoreanEnglish Permissions Limitations Conditions \u2705 \uc0c1\uc5c5\uc801 \uc0ac\uc6a9 \u274e \ubcf4\uc99d \u2753 \ub77c\uc774\uc120\uc2a4\uc640 \uc800\uc791\uad8c \uace0\uc9c0 (\uad8c\uace0\uc0ac\ud56d) \u2705 \ubc30\ud3ec \u274e \ubb34\ub840\ud558\uac8c \uad74\uae30 \u2705 \ubcc0\uacbd/\uc218\uc815/2\ucc28\uc800\uc791 \u274e \ub7ec\uc2dc\uc544\ub97c \ube44\ub86f\ud55c \uc804\uc7c1\uc744 \ub3d5\ub294 \u2705 \uac1c\uc778\uc801 \uc0ac\uc6a9 \u274e \uc544\ubb34\ub7f0 \ubcc0\uacbd\uc0ac\ud56d \uc5c6\uc774 \ubcf5\uc81c
          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
Permissions Limitations Conditions \u2705 Commercial use \u274e Warranty \u2753 License and copyright notice (Recommendation) \u2705 Distribution \u274e Being Rude \u2705 Modification \u274e Russian, And supporting war \u2705 Private use \u274e Copy without any modification
          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":"todo/","title":"\ud560\uc77c","text":""},{"location":"todo/#_2","title":"\uc9c4\ud589\uc911\uc774\uac70\ub098 \uac80\ud1a0\uc911","text":""},{"location":"todo/#easing","title":"Easing \ubb38\uc11c","text":"

Easing \ubb38\uc11c\uc5d0 Out In Inout \ube44\uad50 \uc601\uc0c1 \ub9cc\ub4e4\uae30

"},{"location":"todo/#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":"todo/#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":"todo/#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":"todo/#_3","title":"\uba3c \ubbf8\ub798\uc5d0 . . .","text":"

\ud639\uc740 \uc774\ub8e8\uc6cc\uc9c0\uc9c0 \uc54a\ub294

"},{"location":"todo/#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.

"},{"location":"todo/#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.

"},{"location":"todo/#quad-prerender","title":"Quad Prerender","text":"

\ubbf8\ub9ac \ub80c\ub354\ub9c1\ub41c rbxm \uac1d\uccb4\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. lua \uc2a4\ud06c\ub9bd\ud2b8\ub4e4\uc774 \ub9e4\ud551\ub418\uc5b4 \uc77c\ubc18\uc801\uc774\uac8c \ub3cc\uc544\uac11\ub2c8\ub2e4.

"},{"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/directions/","title":"Directions","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":"\ubbf8\ub9ac\ubcf4\uae30\uadf8\ub798\ud504 \uac1c\ud615

\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)->linker

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.

Overwite 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 \ub9cc\ub4dc\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.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Event = Quad.Event\nlocal Mount = Quad.Mount\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        [Event \"MouseButton1Click\"] = function (self,x,y)\n            print((\"\ubc84\ud2bc\uc774 %d,%d \uc5d0\uc11c \ub20c\ub838\uc2b5\ub2c8\ub2e4\"):format(x,y))\n        end;\n        Size = props \"Size\";\n        Text = props \"Text\"; -- \ub808\uc9c0\uc2a4\ud130\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4\n    }\nend\n\nlocal myImported = Class(myClass)\nmyImported.Size = UDim2.fromOffset(200,200)\n\nlocal test = myImported {\n    Text = \"wow\"\n}\nMount(ScreenGUI, test)\n\n-- \ud14d\uc2a4\ud2b8\ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4\nwhile task.wait(1) do\n    test.Text = \"w\"..(\"o\"):rep(#test.Text-1)..\"w\"\nend\n

Overwite Option :Init(props:valueStore)

\uc120\ud0dd\uc801\uc778 \uba54\uc18c\ub4dc\ub85c, Render \uac00 \uc218\ud589 \ub418\uae30 \uc804\uc5d0 \ubbf8\ub9ac props \uac12\uc744 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Init(props)\n    -- Size \uac12\uc774 \uc5c6\ub2e4\uba74 \uae30\ubcf8\uac12\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4.\n    props:Default(\"Size\", UDim2.fromOffset(100,100))\n\n    -- \uc55e\uc5d0 _ \ub97c \ubd87\uc5ec \ub0b4\ubd80 \ubcc0\uc218\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.\n    -- \uc5b4\ub514\uc5d0\uc11c\ub098 \uc4f0\uc77c \uc218 \uc788\uc73c\uba70 register \uc5d0 \uc601\ud5a5\uc8fc\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n    self._asdf = true\nend\nfunction myClass:Render(props)\n    return TextButton {\n        props \"Size\"\n    }\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported() -- \uc635\uc158 \uc5c6\uc74c\nprint(myButton.Size)\n

Overwite Option :AfterRender(object:any)

\uc120\ud0dd\uc801\uc778 \uba54\uc18c\ub4dc\ub85c, Render \uac00 \uc218\ud589 \ub41c \ud6c4 \ud560 \uc791\uc5c5\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uc778\uc790\ub85c Render \uac00 \ubc18\ud658\ud55c \uac12\uc774 \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_button\"; -- \uc790\uae30 \uc790\uc2e0\uc5d0 \uc774 \ubc84\ud2bc\uc744 \ub123\uc2b5\ub2c8\ub2e4\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button == object) -- true\nend\n\nlocal myImported = Class(myClass)\nmyImported() -- \uc635\uc158 \uc5c6\uc74c\n

Overwite Option :Update()

:Render \uc640 :AfterRender \ub97c \ub2e4\uc2dc \uc2e4\ud589\ud558\uace0, \uc774\uc804\uc5d0 \uc788\ub358 \uc790\uc2dd\ub4e4\uc744 \ub2e4\uc2dc \ub04c\uc5b4\uc635\ub2c8\ub2e4. \uc774\uc804\uc758 Render \uacb0\uacfc\ub294 \uc81c\uac70\ub429\ub2c8\ub2e4

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\nlocal count = 0\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    print(\"Rendering!\")\n    count = count + 1\n    return TextButton {\n        self \"_button\";\n        Name = tostring(count);\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button.Name)\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton:Update() -- update\nmyButton:Update() -- update\nmyButton:Update() -- update\n

Overwite Option .Getter.<PropertyName>(self)

\uac12\uc744 \uc5bb\ub294\ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {}\nend\n-- \uac12\uc744 \uc77d\ub294\ub370 \uc0ac\uc6a9\ud560 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4\nfunction myClass.Getter.Test(self)\n    return \"Hello World\"\nend\n\nlocal myImported = Class(myClass)\nprint(myImported().Test)\n

Overwite Option .Setter.<PropertyName>(self,newValue:any)

\uac12\uc744 \uc124\uc815\ud558\ub294\ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_button\";\n        Text = \"wow\";\n    }\nend\n-- \uac12\uc744 \uc9c0\uc815\ud558\ub294\ub370 \uc0ac\uc6a9\ud560 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4\nfunction myClass.Setter.Test(self,newValue)\n    self._button.Text = newValue\nend\nfunction myClass.Getter.Test(self)\n    return self._button.Text\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nprint(myButton.Test)\nmyButton.Test = \"Hello World\"\nprint(myButton.Test)\n

Overwite Option .UpdateTriggers.<PropertyName> = boolean?

\ud574\ub2f9 \uac12\uc744 \ubcc0\uacbd\ud558\uba74 Update \uac00 \uc218\ud589\ub420\uc9c0 \uc5ec\ubd80\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\nlocal count = 0\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    print(\"Rendering!\")\n    count = count + 1\n    return TextButton {\n        self \"_button\";\n        Name = tostring(count);\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button.Name)\nend\n-- \uac12 \ubcc0\uacbd\uc2dc \uc5c5\ub370\uc774\ud2b8 \uc5ec\ubd80\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4\nmyClass.UpdateTriggers.Test = true\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton.Test = 1 -- update\nmyButton.Test = 1 -- update\nmyButton.Test = 1 -- update\n

Overwite Option :Unload(object)

:Destroy \uac00 \ud638\ucd9c\ub420 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ub530\ub85c \uc120\uc5b8\ud558\uc9c0 \uc54a\uc544\ub3c4 \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. object \ub294 :Render \uac00 \ubc18\ud658\ud55c \uac12\uc785\ub2c8\ub2e4

:GetPropertyChangedSignal(propertyName:string)->Bindable

\uac12 \ubcc0\uacbd\uc744 \uc5f0\uacb0\ud560 \uc218 \uc788\ub294 Bindable\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. :EmitPropertyChangedSignal \uc73c\ub85c \uc774 \uc2dc\uadf8\ub110\uc744 \uc791\ub3d9\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud3b8\uc758\uc0c1 \uc774 \uc2dc\uadf8\ub110\uc774 \uc791\ub3d9\ud560 \ub54c, \uc0c8\ub85c\uc6b4 \uac12\uc774 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

:EmitPropertyChangedSignal(propertyName:string,changedValue:any?)

\ud504\ub85c\ud37c\ud2f0 \ubcc0\uacbd\uc2dc :GetPropertyChangedSignal \uc5d0 \ub4f1\ub85d\ub41c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \uc774 \ud568\uc218\ub97c \ud638\ucd9c\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c self.a = 1 \uacfc \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \ubc14\ub85c \uac12\uc744 \uc124\uc815\ud558\ub294 \uacbd\uc6b0 \uc790\ub3d9\uc801\uc73c\ub85c \uc774 \ud568\uc218\uac00 \uc2e4\ud589\ub418\uc9c0\ub9cc, \ud14d\uc2a4\ud2b8 \ubc15\uc2a4\uc758 \ud14d\uc2a4\ud2b8 \ucc98\ub7fc \uac1d\uccb4\uc758 \ubcc0\uacbd\uc0ac\ud56d\uc744 \uc5f0\ub3d9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0 \uc774 \ud568\uc218\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. changedValue \ub294 \uc120\ud0dd\uc0ac\ud56d\uc774\uba70, \uc8fc\uc5b4\uc9c0\uc9c0 \uc54a\uc73c\uba74 self[propertyName]\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_box\";\n        Text = \"test\";\n        Size = UDim2.fromOffset(200,200);\n        [Evnet.Prop \"Text\"] = function (this,newValue)\n            self:EmitPropertyChangedSignal(\"Text\",newValue)\n        end;\n        -- [Evnet.Prop \"Text\"] = self \"Text\" \uc640 \ub3d9\uc77c\ud569\ub2c8\ub2e4.\n        -- self(name:string) \ubb38\ubc95\uc73c\ub85c \ubcc0\uacbd \uc774\ubca4\ud2b8 \uc5ed\uc2dc \ub9c1\ud06c\n        -- \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n    }\nend\nfunction myClass.Getter.Text(self)\n    return self._box.Text\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton:GetPropertyChangedSignal(\"Text\"):Connect(function()\n    print(myButton.Text)\nend)\nMount(ScreenGUI, myButton)\n

Event .ChildAdded:Connect((child)->())->Connection

\uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uac00 \ucd94\uac00\ub420 \ub54c \ubc1c\uc0dd\ud558\ub294 \uc774\ubca4\ud2b8\uc785\ub2c8\ub2e4. :Init \ub610\ub294 :AfterRender \uc5d0\uc11c \uc0ac\uc6a9\ud558\uba74 \uc635\uc158\uc73c\ub85c \ub123\uc740 \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uac00 \uc774 \uc774\ubca4\ud2b8\ub97c \ud1b5\ud574 \uc5bb\uc5b4\uc9c8 \uc218 \uc788\uc73c\uba70, \ucd94\ud6c4 Mount \ub97c \ud1b5\ud574 \ucd94\uac00\ub418\ub294 \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8 \ub610\ud55c \uc774 \uc774\ubca4\ud2b8\ub85c \uc5bb\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_holder\";\n    }\nend\nfunction myClass:AfterRender()\n    self.ChildAdded:Connect(function(child)\n        print(child.Name)\n    end)\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported{\n    -- Init \uc5d0 ChildAdded \ub97c \ub123\uc740\uac83\uc774 \uc544\ub2c8\uae30 \ub54c\ubb38\uc5d0 \ucd9c\ub825\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n    -- \uadf8\ub7ec\ub098 AfterRender \uc5d0 :GetChildren \uc744 \ub123\uc5b4 \uc774 \uc624\ube0c\uc81d\ud2b8\ub97c\n    -- \uc5bb\uc5b4\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n    TextButton { Name = \"Hello \"};\n}\n\nMount(myButton, TextButton{ Name = \"Hello\" })\nMount(myButton, TextButton{ Name = \"World\" })\n

:GetChildren()

\uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \uac00\uc838\uc624\ub294 \ud568\uc218\uc785\ub2c8\ub2e4. :Init() \uc640 :AfterRender() \uc5d0\uc11c\ub294 \ube48 \ud14c\uc774\ube14\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \uc790\uc2dd\uc758 \uc21c\uc11c\ub294 \uc77c\uc815\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_holder\";\n    }\nend\nfunction myClass:AfterRender()\n    for i,v in ipairs(self:GetChildren()) do\n        print(v.Name)\n    end\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported{\n    TextButton { Name = \"Hello World\"};\n}\n\n-- \ub098\uc911\uc5d0 \ucd94\uac00\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub294 \ucd9c\ub825\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\nMount(myButton, TextButton{ Name = \"Hello\" })\nMount(myButton, TextButton{ Name = \"World\" })\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

-- \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

: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.

:Observe((newValue:any)->())

:Register\uc758 \uac04\uc18c\ud654 \ubc84\uc804\uc785\ub2c8\ub2e4. :Register\uc640 \ub2e4\ub974\uac8c \uc790\ub3d9\uc801\uc73c\ub85c \ub4e4\uc5b4\uac04 \ud568\uc218\ub97c GC \ub85c \ubd80\ud130 \ubcf4\ud638\ud558\uae30 \ub54c\ubb38\uc5d0 \ub4e4\uc5b4\uac04 \ud568\uc218\ub97c \ub530\ub85c \uc800\uc7a5 \ud560 \ud544\uc694\uac00 \uc5c6\uc73c\uba70, \uc778\uc790\ub294 newValue \ud558\ub098\ub9cc \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

newValue \ub294 :Add, :With, :Tween, :Default \uac00 \uacc4\uc0b0\ub41c \uc0c1\ud0dc\ub85c \uc81c\uacf5\ub429\ub2c8\ub2e4.

\uac04\ub7b5\ud55c \uc6a9\ubc95
myStore.test = 1\nmyStore \"test\":Add(1):Observe(function(_,newValue)\n    -- \uac12 \ubcc0\uacbd\uc2dc \ucd9c\ub825\ub429\ub2c8\ub2e4\n    print(newValue)\nend)\nmyStore.test = 2\n
"},{"location":"include/tween/","title":"Tween","text":"

Tween.RunTween(Item:any, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)->TweenHandler

\ud2b8\uc708\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4. \ud2b8\uc708 \uc635\uc158\uc5d0 \ub300\ud55c \uc815\ubcf4\ub294 TweenOptions \ubb38\uc11c\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Ended, OnStepped, Setter, Getter \uac12\uc774 \uc124\uc815\ub418\uba74 Option \uc548\uc758 \uac12\ubcf4\ub2e4 \uc6b0\uc120\uc801\uc73c\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uae30\ub2a5\uc740 TweenOptions\uc758 \ub0b4\uc6a9\uacfc \uac19\uc2b5\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ud2b8\uc708\uc744 \uc911\ub2e8\uc2dc\ud0ac \uc218 \uc788\ub3c4\ub85d TweenHandler \uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4. \ub2e4\ub978 \ud2b8\uc708\uc774 \ubcc0\uacbd\uc911\uc778 \uc18d\uc131\uc774 \ub2e4\uc2dc \ud2b8\uc708\ud558\ub3c4\ub85d \ud638\ucd9c\ub418\uba74, \uc774\uc804 \ud2b8\uc708\uc5d0\uc11c \ud574\ub2f9 \uc18d\uc131\uc740 \ud2b8\uc708\uc774 \uc911\ub2e8\ub418\uba70 \uc0c8\ub85c\uc6b4 \ud2b8\uc708\uc73c\ub85c \ub36e\uc5b4\uc4f0\uae30 \ub429\ub2c8\ub2e4.

Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n

Tween.RunTweens(Items:{[number]:any}, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)

Tween.RunTween \uc640 \uac19\uc73c\ub098 \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub97c \ud55c\uaebc\ubc88\uc5d0 \ud2b8\uc708\ud569\ub2c8\ub2e4. \uc544\ubb34\uac83\ub3c4 \ubc18\ud658\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4

Tween.RunTween({myFrame1, myFrame2, myFrame3},{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n

Tween.StopTween(ItemOrHandler:TweenHandler|any)

\ud2b8\uc708\uc744 \uba48\ucda5\ub2c8\ub2e4. TweenHandler \ub610\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\uc5b4 \uba48\ucd9c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\uc73c\uba74 \uadf8 \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc2e4\ud589\uc911\uc778 \ubaa8\ub4e0 \ud2b8\uc708\uc744 \uba48\ucda5\ub2c8\ub2e4.

TweenHandler \uc774\uc6a9\uc624\ube0c\uc81d\ud2b8 \uc774\uc6a9
local Handler = Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n\nTween.StopTween(Handler)\n
local Handler = Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n\nTween.StopTween(myFrame)\n

Tween.StopPropertyTween(Item:any, PropertyName:string)

\uc624\ube0c\uc81d\ud2b8\uc5d0 \ud2b9\uc815 \ud504\ub85c\ud37c\ud2f0\uc758 \ud2b8\uc708\uc744 \uc911\ub2e8\uc2dc\ud0b5\ub2c8\ub2e4. TweenHandler \ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Tween.StopPropertyTween(ItemOrHandler:IsTweening|any)->boolean

\ud574\ub2f9 \uc624\ube0c\uc81d\ud2b8 \ub610\ub294 TweenHandler \ub85c \ud2b8\uc708\uc774 \uc9c4\ud589\uc911\uc778\uc9c0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud569\ub2c8\ub2e4.

Tween.IsPropertyTweening(Item:any, PropertyName:string)

\ud574\ub2f9 \uc624\ube0c\uc81d\ud2b8\uc758 \ud504\ub85c\ud37c\ud2f0\uac00 \ud2b8\uc708\uc911\uc774\uc9c0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud569\ub2c8\ub2e4. TweenHandler \ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Tween.Easings: { [string]: EasingFunction }

\uc774\uc9d5 \ud568\uc218\ub4e4\uc774 \ub2f4\uaca8\uc788\uc2b5\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
\uadf8\ub798\ud504\uc640 \ubbf8\ub9ac\ubcf4\uae30\ub294 Easings \uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

Tween.Easings: { [string]: EasingFunction }

\uc774\uc9d5 \ud568\uc218\ub4e4\uc774 \ub2f4\uaca8\uc788\uc2b5\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
\uc790\uc138\ud55c \uc815\ubcf4\ub294 Easings \uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\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/typeDirections/","title":"typeDirections","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":"reference/","title":"Reference","text":"

\uc774 \uc139\uc158\uc740 api \ub0b4\uc6a9\uc744 \ub098\uc5f4\ud558\uc9c0\ub9cc, \uae4a\uac8c \uc124\uba85\ud558\uc9c0 \uc54a\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c\ub97c \uc77d\uc5b4\ubcf4\ub294\uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.

"},{"location":"reference/event/","title":"Event","text":""},{"location":"reference/extend/","title":"Extend","text":"

self(name:string)->linker

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.

Overwite 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 \ub9cc\ub4dc\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.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Event = Quad.Event\nlocal Mount = Quad.Mount\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        [Event \"MouseButton1Click\"] = function (self,x,y)\n            print((\"\ubc84\ud2bc\uc774 %d,%d \uc5d0\uc11c \ub20c\ub838\uc2b5\ub2c8\ub2e4\"):format(x,y))\n        end;\n        Size = props \"Size\";\n        Text = props \"Text\"; -- \ub808\uc9c0\uc2a4\ud130\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4\n    }\nend\n\nlocal myImported = Class(myClass)\nmyImported.Size = UDim2.fromOffset(200,200)\n\nlocal test = myImported {\n    Text = \"wow\"\n}\nMount(ScreenGUI, test)\n\n-- \ud14d\uc2a4\ud2b8\ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4\nwhile task.wait(1) do\n    test.Text = \"w\"..(\"o\"):rep(#test.Text-1)..\"w\"\nend\n

Overwite Option :Init(props:valueStore)

\uc120\ud0dd\uc801\uc778 \uba54\uc18c\ub4dc\ub85c, Render \uac00 \uc218\ud589 \ub418\uae30 \uc804\uc5d0 \ubbf8\ub9ac props \uac12\uc744 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Init(props)\n    -- Size \uac12\uc774 \uc5c6\ub2e4\uba74 \uae30\ubcf8\uac12\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4.\n    props:Default(\"Size\", UDim2.fromOffset(100,100))\n\n    -- \uc55e\uc5d0 _ \ub97c \ubd87\uc5ec \ub0b4\ubd80 \ubcc0\uc218\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.\n    -- \uc5b4\ub514\uc5d0\uc11c\ub098 \uc4f0\uc77c \uc218 \uc788\uc73c\uba70 register \uc5d0 \uc601\ud5a5\uc8fc\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n    self._asdf = true\nend\nfunction myClass:Render(props)\n    return TextButton {\n        props \"Size\"\n    }\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported() -- \uc635\uc158 \uc5c6\uc74c\nprint(myButton.Size)\n

Overwite Option :AfterRender(object:any)

\uc120\ud0dd\uc801\uc778 \uba54\uc18c\ub4dc\ub85c, Render \uac00 \uc218\ud589 \ub41c \ud6c4 \ud560 \uc791\uc5c5\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uc778\uc790\ub85c Render \uac00 \ubc18\ud658\ud55c \uac12\uc774 \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_button\"; -- \uc790\uae30 \uc790\uc2e0\uc5d0 \uc774 \ubc84\ud2bc\uc744 \ub123\uc2b5\ub2c8\ub2e4\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button == object) -- true\nend\n\nlocal myImported = Class(myClass)\nmyImported() -- \uc635\uc158 \uc5c6\uc74c\n

Overwite Option :Update()

:Render \uc640 :AfterRender \ub97c \ub2e4\uc2dc \uc2e4\ud589\ud558\uace0, \uc774\uc804\uc5d0 \uc788\ub358 \uc790\uc2dd\ub4e4\uc744 \ub2e4\uc2dc \ub04c\uc5b4\uc635\ub2c8\ub2e4. \uc774\uc804\uc758 Render \uacb0\uacfc\ub294 \uc81c\uac70\ub429\ub2c8\ub2e4

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\nlocal count = 0\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    print(\"Rendering!\")\n    count = count + 1\n    return TextButton {\n        self \"_button\";\n        Name = tostring(count);\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button.Name)\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton:Update() -- update\nmyButton:Update() -- update\nmyButton:Update() -- update\n

Overwite Option .Getter.<PropertyName>(self)

\uac12\uc744 \uc5bb\ub294\ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {}\nend\n-- \uac12\uc744 \uc77d\ub294\ub370 \uc0ac\uc6a9\ud560 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4\nfunction myClass.Getter.Test(self)\n    return \"Hello World\"\nend\n\nlocal myImported = Class(myClass)\nprint(myImported().Test)\n

Overwite Option .Setter.<PropertyName>(self,newValue:any)

\uac12\uc744 \uc124\uc815\ud558\ub294\ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_button\";\n        Text = \"wow\";\n    }\nend\n-- \uac12\uc744 \uc9c0\uc815\ud558\ub294\ub370 \uc0ac\uc6a9\ud560 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4\nfunction myClass.Setter.Test(self,newValue)\n    self._button.Text = newValue\nend\nfunction myClass.Getter.Test(self)\n    return self._button.Text\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nprint(myButton.Test)\nmyButton.Test = \"Hello World\"\nprint(myButton.Test)\n

Overwite Option .UpdateTriggers.<PropertyName> = boolean?

\ud574\ub2f9 \uac12\uc744 \ubcc0\uacbd\ud558\uba74 Update \uac00 \uc218\ud589\ub420\uc9c0 \uc5ec\ubd80\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\nlocal count = 0\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    print(\"Rendering!\")\n    count = count + 1\n    return TextButton {\n        self \"_button\";\n        Name = tostring(count);\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button.Name)\nend\n-- \uac12 \ubcc0\uacbd\uc2dc \uc5c5\ub370\uc774\ud2b8 \uc5ec\ubd80\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4\nmyClass.UpdateTriggers.Test = true\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton.Test = 1 -- update\nmyButton.Test = 1 -- update\nmyButton.Test = 1 -- update\n

Overwite Option :Unload(object)

:Destroy \uac00 \ud638\ucd9c\ub420 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ub530\ub85c \uc120\uc5b8\ud558\uc9c0 \uc54a\uc544\ub3c4 \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. object \ub294 :Render \uac00 \ubc18\ud658\ud55c \uac12\uc785\ub2c8\ub2e4

:GetPropertyChangedSignal(propertyName:string)->Bindable

\uac12 \ubcc0\uacbd\uc744 \uc5f0\uacb0\ud560 \uc218 \uc788\ub294 Bindable\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. :EmitPropertyChangedSignal \uc73c\ub85c \uc774 \uc2dc\uadf8\ub110\uc744 \uc791\ub3d9\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud3b8\uc758\uc0c1 \uc774 \uc2dc\uadf8\ub110\uc774 \uc791\ub3d9\ud560 \ub54c, \uc0c8\ub85c\uc6b4 \uac12\uc774 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

:EmitPropertyChangedSignal(propertyName:string,changedValue:any?)

\ud504\ub85c\ud37c\ud2f0 \ubcc0\uacbd\uc2dc :GetPropertyChangedSignal \uc5d0 \ub4f1\ub85d\ub41c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \uc774 \ud568\uc218\ub97c \ud638\ucd9c\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c self.a = 1 \uacfc \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \ubc14\ub85c \uac12\uc744 \uc124\uc815\ud558\ub294 \uacbd\uc6b0 \uc790\ub3d9\uc801\uc73c\ub85c \uc774 \ud568\uc218\uac00 \uc2e4\ud589\ub418\uc9c0\ub9cc, \ud14d\uc2a4\ud2b8 \ubc15\uc2a4\uc758 \ud14d\uc2a4\ud2b8 \ucc98\ub7fc \uac1d\uccb4\uc758 \ubcc0\uacbd\uc0ac\ud56d\uc744 \uc5f0\ub3d9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0 \uc774 \ud568\uc218\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. changedValue \ub294 \uc120\ud0dd\uc0ac\ud56d\uc774\uba70, \uc8fc\uc5b4\uc9c0\uc9c0 \uc54a\uc73c\uba74 self[propertyName]\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_box\";\n        Text = \"test\";\n        Size = UDim2.fromOffset(200,200);\n        [Evnet.Prop \"Text\"] = function (this,newValue)\n            self:EmitPropertyChangedSignal(\"Text\",newValue)\n        end;\n        -- [Evnet.Prop \"Text\"] = self \"Text\" \uc640 \ub3d9\uc77c\ud569\ub2c8\ub2e4.\n        -- self(name:string) \ubb38\ubc95\uc73c\ub85c \ubcc0\uacbd \uc774\ubca4\ud2b8 \uc5ed\uc2dc \ub9c1\ud06c\n        -- \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n    }\nend\nfunction myClass.Getter.Text(self)\n    return self._box.Text\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton:GetPropertyChangedSignal(\"Text\"):Connect(function()\n    print(myButton.Text)\nend)\nMount(ScreenGUI, myButton)\n

Event .ChildAdded:Connect((child)->())->Connection

\uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uac00 \ucd94\uac00\ub420 \ub54c \ubc1c\uc0dd\ud558\ub294 \uc774\ubca4\ud2b8\uc785\ub2c8\ub2e4. :Init \ub610\ub294 :AfterRender \uc5d0\uc11c \uc0ac\uc6a9\ud558\uba74 \uc635\uc158\uc73c\ub85c \ub123\uc740 \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uac00 \uc774 \uc774\ubca4\ud2b8\ub97c \ud1b5\ud574 \uc5bb\uc5b4\uc9c8 \uc218 \uc788\uc73c\uba70, \ucd94\ud6c4 Mount \ub97c \ud1b5\ud574 \ucd94\uac00\ub418\ub294 \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8 \ub610\ud55c \uc774 \uc774\ubca4\ud2b8\ub85c \uc5bb\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_holder\";\n    }\nend\nfunction myClass:AfterRender()\n    self.ChildAdded:Connect(function(child)\n        print(child.Name)\n    end)\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported{\n    -- Init \uc5d0 ChildAdded \ub97c \ub123\uc740\uac83\uc774 \uc544\ub2c8\uae30 \ub54c\ubb38\uc5d0 \ucd9c\ub825\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n    -- \uadf8\ub7ec\ub098 AfterRender \uc5d0 :GetChildren \uc744 \ub123\uc5b4 \uc774 \uc624\ube0c\uc81d\ud2b8\ub97c\n    -- \uc5bb\uc5b4\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n    TextButton { Name = \"Hello \"};\n}\n\nMount(myButton, TextButton{ Name = \"Hello\" })\nMount(myButton, TextButton{ Name = \"World\" })\n

:GetChildren()

\uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \uac00\uc838\uc624\ub294 \ud568\uc218\uc785\ub2c8\ub2e4. :Init() \uc640 :AfterRender() \uc5d0\uc11c\ub294 \ube48 \ud14c\uc774\ube14\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \uc790\uc2dd\uc758 \uc21c\uc11c\ub294 \uc77c\uc815\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_holder\";\n    }\nend\nfunction myClass:AfterRender()\n    for i,v in ipairs(self:GetChildren()) do\n        print(v.Name)\n    end\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported{\n    TextButton { Name = \"Hello World\"};\n}\n\n-- \ub098\uc911\uc5d0 \ucd94\uac00\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub294 \ucd9c\ub825\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\nMount(myButton, TextButton{ Name = \"Hello\" })\nMount(myButton, TextButton{ Name = \"World\" })\n

"},{"location":"reference/lang/","title":"Lang","text":"

Lang.FailedMessage:string

\uc544\ubb34\ub7f0 \ubc88\uc5ed \uac12\ub3c4 \uc5bb\uc5b4\uc624\uc9c0 \ubabb\ud558\uc600\uc744\ub54c \ubcf4\uc5ec\uc904 \ubb38\uc790\uc5f4\uc785\ub2c8\ub2e4. \ubcc0\uacbd\uc2dc \uc790\ub3d9\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\uac00 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.

Lang.CurrentLocale:Locale<item of Lang.Locales>

\ud604\uc81c \uc0ac\uc6a9\uc911\uc778 \uc5b8\uc5b4\uc785\ub2c8\ub2e4. \ubcc0\uacbd\uc2dc \uc790\ub3d9\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\uac00 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4. Lang.Locales \uc548\uc758 \uac12\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.

"},{"location":"reference/lang/#langlocales","title":"Lang.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":"reference/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":"reference/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":"reference/signal/","title":"Signal","text":"

Signal.Bindable.New(id:string)->Bindable

\uc0c8\ub85c\uc6b4 Bindable \uc744 \uc0dd\uc131\ud558\uac70\ub098 \uc774\uc804\uc758 Bindable \uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

Signal.Disconnecter.New(id:string)->Disconnecter

\uc0c8\ub85c\uc6b4 Disconnecter \uc744 \uc0dd\uc131\ud558\uac70\ub098 \uc774\uc804\uc758 Disconnecter \uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

"},{"location":"reference/signal/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":"reference/signal/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":"reference/store/","title":"Store","text":"

Store.GetStore(id:string?)->store

\uac12\ub4e4\uc744 \uc800\uc7a5\ud558\uace0 \ub808\uc9c0\uc2a4\ud130\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\ub294 \uac12 \uc800\uc7a5\uc18c\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.

Store.GetObject(id:string)->Object?

\ud574\ub2f9 id \ub97c \uac00\uc9c4 \uc0dd\uc131\ub41c \uc624\ube0c\uc81d\ud2b8\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.

Store.GetObjects(id:string)->objectList?

\ud574\ub2f9 id \ub97c \uac00\uc9c4 \uc0dd\uc131\ub41c \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \ubc18\ud658\uc740 objectList \ud0c0\uc785\uc744 \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uace0\uae09 ID \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc790\uc138\ud55c \uc0ac\ud56d\uc740 \ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c\ub97c \ud655\uc778\ud558\uc138\uc694.

"},{"location":"reference/store/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":"reference/tween/","title":"Tween","text":"

Tween.RunTween(Item:any, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)->TweenHandler

\ud2b8\uc708\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4. \ud2b8\uc708 \uc635\uc158\uc5d0 \ub300\ud55c \uc815\ubcf4\ub294 TweenOptions \ubb38\uc11c\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Ended, OnStepped, Setter, Getter \uac12\uc774 \uc124\uc815\ub418\uba74 Option \uc548\uc758 \uac12\ubcf4\ub2e4 \uc6b0\uc120\uc801\uc73c\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uae30\ub2a5\uc740 TweenOptions\uc758 \ub0b4\uc6a9\uacfc \uac19\uc2b5\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ud2b8\uc708\uc744 \uc911\ub2e8\uc2dc\ud0ac \uc218 \uc788\ub3c4\ub85d TweenHandler \uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4. \ub2e4\ub978 \ud2b8\uc708\uc774 \ubcc0\uacbd\uc911\uc778 \uc18d\uc131\uc774 \ub2e4\uc2dc \ud2b8\uc708\ud558\ub3c4\ub85d \ud638\ucd9c\ub418\uba74, \uc774\uc804 \ud2b8\uc708\uc5d0\uc11c \ud574\ub2f9 \uc18d\uc131\uc740 \ud2b8\uc708\uc774 \uc911\ub2e8\ub418\uba70 \uc0c8\ub85c\uc6b4 \ud2b8\uc708\uc73c\ub85c \ub36e\uc5b4\uc4f0\uae30 \ub429\ub2c8\ub2e4.

Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n

Tween.RunTweens(Items:{[number]:any}, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)

Tween.RunTween \uc640 \uac19\uc73c\ub098 \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub97c \ud55c\uaebc\ubc88\uc5d0 \ud2b8\uc708\ud569\ub2c8\ub2e4. \uc544\ubb34\uac83\ub3c4 \ubc18\ud658\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4

Tween.RunTween({myFrame1, myFrame2, myFrame3},{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n

Tween.StopTween(ItemOrHandler:TweenHandler|any)

\ud2b8\uc708\uc744 \uba48\ucda5\ub2c8\ub2e4. TweenHandler \ub610\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\uc5b4 \uba48\ucd9c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\uc73c\uba74 \uadf8 \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc2e4\ud589\uc911\uc778 \ubaa8\ub4e0 \ud2b8\uc708\uc744 \uba48\ucda5\ub2c8\ub2e4.

TweenHandler \uc774\uc6a9\uc624\ube0c\uc81d\ud2b8 \uc774\uc6a9
local Handler = Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n\nTween.StopTween(Handler)\n
local Handler = Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n\nTween.StopTween(myFrame)\n

Tween.StopPropertyTween(Item:any, PropertyName:string)

\uc624\ube0c\uc81d\ud2b8\uc5d0 \ud2b9\uc815 \ud504\ub85c\ud37c\ud2f0\uc758 \ud2b8\uc708\uc744 \uc911\ub2e8\uc2dc\ud0b5\ub2c8\ub2e4. TweenHandler \ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Tween.StopPropertyTween(ItemOrHandler:IsTweening|any)->boolean

\ud574\ub2f9 \uc624\ube0c\uc81d\ud2b8 \ub610\ub294 TweenHandler \ub85c \ud2b8\uc708\uc774 \uc9c4\ud589\uc911\uc778\uc9c0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud569\ub2c8\ub2e4.

Tween.IsPropertyTweening(Item:any, PropertyName:string)

\ud574\ub2f9 \uc624\ube0c\uc81d\ud2b8\uc758 \ud504\ub85c\ud37c\ud2f0\uac00 \ud2b8\uc708\uc911\uc774\uc9c0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud569\ub2c8\ub2e4. TweenHandler \ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Tween.Easings: { [string]: EasingFunction }

\uc774\uc9d5 \ud568\uc218\ub4e4\uc774 \ub2f4\uaca8\uc788\uc2b5\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
\uadf8\ub798\ud504\uc640 \ubbf8\ub9ac\ubcf4\uae30\ub294 Easings \uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

Tween.Easings: { [string]: EasingFunction }

\uc774\uc9d5 \ud568\uc218\ub4e4\uc774 \ub2f4\uaca8\uc788\uc2b5\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
\uc790\uc138\ud55c \uc815\ubcf4\ub294 Easings \uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

"},{"location":"reference/tween/directions/","title":"Tween.Directions","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":"reference/tween/easings/","title":"Tween.Easings","text":"\ubbf8\ub9ac\ubcf4\uae30\uadf8\ub798\ud504 \uac1c\ud615

\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":"reference/tween/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":"tutorial/","title":"Getting Started","text":"

\uc2e4\ud5d8\uc801\uc778 \ubaa8\ub4c8

\uc774 \ubaa8\ub4c8\uc740 \uc5c5\ub370\uc774\ud2b8\uac00 \ube48\ubc88\ud569\ub2c8\ub2e4! \ud56d\uc0c1 Github \ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694!

"},{"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!

\ubcc0\uacbd \uc0ac\ud56d\uc740 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

"},{"location":"tutorial/#_2","title":"\uc124\uce58","text":"

3\uac00\uc9c0 \ubc29\ubc95\uc911 \uac00\uc7a5 \ud3b8\ud55c \ubc29\ubc95\uc744 \uc120\ud0dd\ud574 \ubaa8\ub4c8\uc744 \uc124\uce58\ud574\uc8fc\uc138\uc694.

"},{"location":"tutorial/#rbxmx","title":"\ub4dc\ub808\uadf8 \uc5d4 \ub4dc\ub86d / rbxmx \ud30c\uc77c","text":"

\ub4dc\ub808\uadf8\ud574 \uc2a4\ud29c\ub514\uc624\uc5d0 \ub123\uc744 \uc218 \uc788\ub294 \ubaa8\ub4c8 \ud30c\uc77c\uc785\ub2c8\ub2e4.

RBXMX \ub2e4\uc6b4\ub85c\ub4dc

\ub2e4\uc6b4\ub85c\ub4dc\ud574 \uc2a4\ud29c\ub514\uc624\uc5d0 \uc62e\uaca8\uc8fc\uc138\uc694.

"},{"location":"tutorial/#git-clone","title":"git clone","text":"

rojo \ub97c \uc0ac\uc6a9\ud574 \ube4c\ub4dc\ud558\ub294 \ubc29\ubc95\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4\uba74 Quad \ub97c \uc9c1\uc811 \ube4c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

git clone https://github.com/qwreey75/Quad Quad\ncd Quad\nmake build\n

\uc708\ub3c4\uc6b0\uc758 \uacbd\uc6b0 make build \ub300\uc2e0 rojo build default.project.json -o output.rbxmx \ub97c \uc785\ub825\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.

"},{"location":"tutorial/#git-submodule","title":"git submodule","text":"

\ud504\ub85c\uc81d\ud2b8\uac00 rojo \ub97c \uc0ac\uc6a9\ud558\uace0 git \uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 submodule \ub85c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

# \uc774\ubbf8 submodule \uc744 \uc0ac\uc6a9\ud558\uace0 \uc788\ub294 \uacbd\uc6b0 \uc785\ub825\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4\ngit submodule init\n# \uc11c\ube0c\ubaa8\ub4c8\uc758 \ub8e8\ud2b8\ub294 \uc9c1\uc811 \uc815\ud574\uc8fc\uc138\uc694\ngit submodule add https://github.com/qwreey75/Quad Quad\n
"},{"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 \uac19\uc740\uac83\ub4e4\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":"\ucd94\uac00\uc801 \ud658\uacbd \uc124\uc815","text":""},{"location":"tutorial/#_5","title":"\ud0c0\uc785 \ubd88\ub7ec\uc624\uae30","text":"

\uae30\ubcf8\uc801\uc73c\ub85c Quad \ub294 \ub85c\ub4dc\uc2dc \ud0c0\uc785 \uac19\uc774 \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 = require(path.to.module.types)\nlocal Quad = (require(path.to.module)::types.module).Init()\n
"},{"location":"tutorial/#_6","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

\ud3b8\uc758\uc0c1\uc744 \uc704\ud574 \uc790\ub3d9 \ub9ac\ub85c\ub4dc\ub97c \uc124\uc815\ud574 \uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

\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. \ud504\ub85c\uc81d\ud2b8\uac00 \ub9e4\uc6b0 \uac70\ub300\ud558\uc9c0 \uc54a\ub2e4\uba74 \ud06c\uac8c \uac71\uc815\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub429\ub2c8\ub2e4.

\ub2e4\uc74c\uacfc \uac19\uc740 \ucf54\ub4dc\ud2b8\ub9ac\ub97c \ub9cc\ub4e4\uc5b4\uc8fc\uc138\uc694.

 | Main (ModuleScript)\n |-- Loader (LocalScript)\n |-- Test (ModuleScript)\n
MainLoaderTest \uc2e4\uc81c\ub85c UI \ub4e4\uc744 \uadf8\ub9ac\ub294 \ucf54\ub4dc\ub4e4\uc774 \ub2f4\uae41\ub2c8\ub2e4.
local Quad = require(path.to.module).Init()\nlocal IsTestMode = script.Name:match(\"_TESTING\") -- \ud14c\uc2a4\ud2b8\ubaa8\ub4dc \uc5ec\ubd80\nlocal LocalPlayer = game.Players.LocalPlayer\nlocal ScreenGUI = Instance.new(\"ScreenGui\",\n    LocalPlayer and LocalPlayer.PlayerGui or game.StarterGui)\nScreenGUI.Name = \"MyGUI\"\nScreenGUI.ResetOnSpawn = false\n\n-- \uc2e4\uc81c \uadf8\ub9ac\ub294 \ucf54\ub4dc\ub4e4\uc774 \ub4e4\uc5b4\uac11\ub2c8\ub2e4.\n\nreturn function()\n    -- \ud14c\uc2a4\ud2b8\uac00 \ub05d\ub098 \ub9cc\ub4e0\uac78 \uc9c0\uc6cc\uc57c \ud560 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4.\n    -- \ucd94\ud6c4 \uc124\uba85\ub420 Unmount() \ub97c \uc774\uc6a9\ud558\uc138\uc694.\n    ScreenGUI:Destroy()\nend\n
\uac8c\uc784\uc744 \ud50c\ub808\uc774 \ud560 \ub54c \ucf54\ub4dc\uac00 \ub85c\ub4dc\ub420 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4dc\ub294 \ub85c\ub354\uc785\ub2c8\ub2e4.
require(script.Parent)\n
\uba85\ub839\ucc3d\uc5d0\uc11c \uba85\ub839\uc5b4 \uc785\ub825\uc73c\ub85c \ud14c\uc2a4\ud2b8\ub97c \uc2e4\ud589 \ud560 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4dc\ub294 \ucf54\ub4dc\ub4e4\uc774 \ub2f4\uae41\ub2c8\ub2e4.
-- \ubaa8\ub4c8 \uc704\uce58\ub85c \uc54c\ub9de\uac8c \ubcc0\uacbd\ud574\uc8fc\uc138\uc694\nlocal Quad = path.to.module\nlocal tracker = require(Quad.tracker)\n\nlocal module = {}\nlocal function reload()\n    if module.unload then pcall(module.unload) end\n    if module.testingModule then pcall(module.testingModule.Destroy,module.testingModule) end\n    module.testingModule = script.Parent:Clone()\n    module.testingModule.Parent = script.Parent.Parent\n    module.testingModule.Archivable = false\n    module.testingModule.Name = module.testingModule.Name .. \"_TESTING\"\n    module.unload = require(module.testingModule)\nend\n\n-- \uc790\ub3d9 \ub9ac\ub85c\ub4dc\ub97c \ucf2d\ub2c8\ub2e4. \uc774\ubbf8 \ucf1c\uc838\uc788\uc73c\uba74 \ub2e4\uc2dc \ub85c\ub4dc\ud569\ub2c8\ub2e4\nfunction module.load()\n    reload()\n    if not module.autoreload then\n        module.autoreload = tracker.new(script.Parent)\n        module.autoreload:init(); wait()\n        module.autoreload:connect(\"updated\",reload)\n    end\nend\n\n-- \uc790\ub3d9 \ub9ac\ub85c\ub4dc\ub97c \ub044\uace0 \ud14c\uc2a4\ud2b8\ub85c \uc0dd\uae34\uac83\uc744 \uc9c0\uc6c1\ub2c8\ub2e4\nfunction module.unload()\n    if module.autoreload then pcall(module.autoreload.deinit,module.autoreload) end\n    if module.unload then pcall(module.unload) end\n    if module.testingModule then pcall(module.testingModule.Destroy,module.testingModule) end\n    module.autoreload = nil\n    module.unload = nil\n    module.testingModule = nil\nend\n\nreturn module\n

\uc774\uc81c \uba85\ub839\uc5b4 \ucc3d\uc5d0\uc11c \uc790\ub3d9 \ub9ac\ub85c\ub4dc\ub97c \ucf1c\uac70\ub098 \ub04c \uc218 \uc788\uc2b5\ub2c8\ub2e4. rojo \ub098 \ud3b8\uc9d1\uae30\ub85c \uc778\ud574 \ucf54\ub4dc\uac00 \ubcc0\uacbd\ub418\uba74 \uc790\ub3d9\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4!

require(path.to.your.module).load()\n
"},{"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/#extend","title":"Extend \ub780?","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.

  1. \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.
  2. \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.
  3. \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.
  4. \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.
  5. \ub9e4\uc6b0 \uc720\uc5f0\ud569\ub2c8\ub2e4. \ub2e4\uc591\ud55c \ubc29\ubc95\uc758 \uad6c\ud604\ubc95\uc744 \uc6d0\ud558\ub294\ub300\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
"},{"location":"tutorial/11_extend/#_1","title":"\ub098\ub9cc\uc758 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uae30","text":"

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. \uc544\ub798\uc758 \ucf54\ub4dc\ub294 \ubaa8\ub4e0 Extend \ubb38\ubc95\uc744 \uc124\uba85\ud569\ub2c8\ub2e4.

 - ScreenGUI\n |-- localscript\n    |-- myClass (ModuleScript)\n

localscriptlocalscript.myClass Extend \ud074\ub798\uc2a4\ub97c \ubd88\ub7ec\uc624\uace0 \uc0ac\uc6a9\ud569\ub2c8\ub2e4
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    -- \uc774 \ud14c\uc774\ube14\uc740 \ubaa8\ub4c8\uc758 :Init(props) \uc5d0 \uc81c\uacf5\ub429\ub2c8\ub2e4.\n    -- :Render(props) \uc5d0\ub3c4 \uc774 \ud14c\uc774\ube14\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.\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\n-- main.Testing = 2\n-- \uc5c5\ub370\uc774\ud2b8 \ud2b8\ub9ac\uac70\uc774\ubbc0\ub85c \uc774 \uac12\uc744 \ubcc0\uacbd\ud558\uba74.\n-- main:Update() \uc640 \uac19\uc740 \ud6a8\uacfc\uac00 \ub0a9\ub2c8\ub2e4.\n
Extend \ud074\ub798\uc2a4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \ub2e4\ub978\uacf3\uc5d0\uc11c \ubd88\ub7ec\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
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 \ub294 Render \uc804 props \ub97c \ucd08\uae30\ud654 \ud558\ub294 \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4\n-- Init \uc5d0\ub294 \ud504\ub85c\ud37c\ud2f0 \ub9ac\uc2a4\ud2b8\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4. 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\")\n    props:Default(\"ZIndex\", 1)\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:Render(props)\n    return TextLabel {\n        Size = UDim2.fromOffset(200,200);\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        -- _holder \ub294 \uc608\uc57d\ub41c \uac12\uc785\ub2c8\ub2e4. \uc790\uc2dd\ub4e4\uc774 \uc5ec\uae30\uc5d0 \ub4e4\uc5b4\uc640\uc57c\n        -- \ud568\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4. \ub9ac\uc2a4\ud2b8\ub098 \uadf8\ub9ac\ub4dc\uac00 \uc788\ub294 \uacbd\uc6b0 \uc720\uc6a9\ud569\ub2c8\ub2e4.\n        -- \ub530\ub85c \uc124\uc815\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0 Render \uac00 \ub9ac\ud134\ud55c \uac12\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.\n        self \"_holder\";\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\":Tween();\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        ZIndex = props \"ZIndex\";\n        -- ... \uc790\uc2dd\uc744 \ub123\uc5b4\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.\n        -- Frame {\n        --    [Event.Created] = function(self)\n        --        print(self.Parent) -- nil \uc77c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4\n        --        \ub530\ub77c\uc11c \ubd80\ubaa8\ub97c \uac74\ub4e4\uc5ec\uc57c \ud558\ub294 \uacbd\uc6b0, self \"\" \ub97c \ud1b5\ud574\n        --        self \uac12\uc5d0 \ub123\uc5b4\ub193\uace0 \ub098\uc911\uc5d0 AfterRender \ub85c \ud574\uacb0\ud574\uc57c\ud569\ub2c8\ub2e4.\n        --    end;\n        -- }\n    }\nend\n\n\n-- AfterRender \ub294 Render \uc9c1\ud6c4 \uc2e4\ud589\ub429\ub2c8\ub2e4.\n-- \ub80c\ub354\ub9c1 \ud6c4 \uc2e4\ud589\ud574\uc57c \ud560 \uac83\uc744 \ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n-- object \ub294 :Render \uac00 \ubc18\ud658\ud55c \uac12\uc785\ub2c8\ub2e4.\n-- AfterRender \ub294 \uc5c6\ub354\ub77c\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.\nfunction myClass:AfterRender(object)\n    print(self._label,\"\uc774 \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n    -- \uc774\ub807\uac8c \ud558\uba74 \ub808\uc9c0\uc2a4\ud130\ub85c \uc5f0\uacb0\ub41c \ubd80\ubd84\ub3c4 \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4.\n    self.ZIndex = 2\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/11_extend/#extend_1","title":"Extend","text":"

Extend \uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uac12\ub4e4\uacfc \uba54\uc18c\ub4dc\uc785\ub2c8\ub2e4.

self(name:string)->linker

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.

Overwite 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 \ub9cc\ub4dc\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.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Event = Quad.Event\nlocal Mount = Quad.Mount\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        [Event \"MouseButton1Click\"] = function (self,x,y)\n            print((\"\ubc84\ud2bc\uc774 %d,%d \uc5d0\uc11c \ub20c\ub838\uc2b5\ub2c8\ub2e4\"):format(x,y))\n        end;\n        Size = props \"Size\";\n        Text = props \"Text\"; -- \ub808\uc9c0\uc2a4\ud130\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4\n    }\nend\n\nlocal myImported = Class(myClass)\nmyImported.Size = UDim2.fromOffset(200,200)\n\nlocal test = myImported {\n    Text = \"wow\"\n}\nMount(ScreenGUI, test)\n\n-- \ud14d\uc2a4\ud2b8\ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4\nwhile task.wait(1) do\n    test.Text = \"w\"..(\"o\"):rep(#test.Text-1)..\"w\"\nend\n

Overwite Option :Init(props:valueStore)

\uc120\ud0dd\uc801\uc778 \uba54\uc18c\ub4dc\ub85c, Render \uac00 \uc218\ud589 \ub418\uae30 \uc804\uc5d0 \ubbf8\ub9ac props \uac12\uc744 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Init(props)\n    -- Size \uac12\uc774 \uc5c6\ub2e4\uba74 \uae30\ubcf8\uac12\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4.\n    props:Default(\"Size\", UDim2.fromOffset(100,100))\n\n    -- \uc55e\uc5d0 _ \ub97c \ubd87\uc5ec \ub0b4\ubd80 \ubcc0\uc218\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.\n    -- \uc5b4\ub514\uc5d0\uc11c\ub098 \uc4f0\uc77c \uc218 \uc788\uc73c\uba70 register \uc5d0 \uc601\ud5a5\uc8fc\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n    self._asdf = true\nend\nfunction myClass:Render(props)\n    return TextButton {\n        props \"Size\"\n    }\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported() -- \uc635\uc158 \uc5c6\uc74c\nprint(myButton.Size)\n

Overwite Option :AfterRender(object:any)

\uc120\ud0dd\uc801\uc778 \uba54\uc18c\ub4dc\ub85c, Render \uac00 \uc218\ud589 \ub41c \ud6c4 \ud560 \uc791\uc5c5\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uc778\uc790\ub85c Render \uac00 \ubc18\ud658\ud55c \uac12\uc774 \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_button\"; -- \uc790\uae30 \uc790\uc2e0\uc5d0 \uc774 \ubc84\ud2bc\uc744 \ub123\uc2b5\ub2c8\ub2e4\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button == object) -- true\nend\n\nlocal myImported = Class(myClass)\nmyImported() -- \uc635\uc158 \uc5c6\uc74c\n

Overwite Option :Update()

:Render \uc640 :AfterRender \ub97c \ub2e4\uc2dc \uc2e4\ud589\ud558\uace0, \uc774\uc804\uc5d0 \uc788\ub358 \uc790\uc2dd\ub4e4\uc744 \ub2e4\uc2dc \ub04c\uc5b4\uc635\ub2c8\ub2e4. \uc774\uc804\uc758 Render \uacb0\uacfc\ub294 \uc81c\uac70\ub429\ub2c8\ub2e4

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\nlocal count = 0\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    print(\"Rendering!\")\n    count = count + 1\n    return TextButton {\n        self \"_button\";\n        Name = tostring(count);\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button.Name)\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton:Update() -- update\nmyButton:Update() -- update\nmyButton:Update() -- update\n

Overwite Option .Getter.<PropertyName>(self)

\uac12\uc744 \uc5bb\ub294\ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {}\nend\n-- \uac12\uc744 \uc77d\ub294\ub370 \uc0ac\uc6a9\ud560 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4\nfunction myClass.Getter.Test(self)\n    return \"Hello World\"\nend\n\nlocal myImported = Class(myClass)\nprint(myImported().Test)\n

Overwite Option .Setter.<PropertyName>(self,newValue:any)

\uac12\uc744 \uc124\uc815\ud558\ub294\ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_button\";\n        Text = \"wow\";\n    }\nend\n-- \uac12\uc744 \uc9c0\uc815\ud558\ub294\ub370 \uc0ac\uc6a9\ud560 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4\nfunction myClass.Setter.Test(self,newValue)\n    self._button.Text = newValue\nend\nfunction myClass.Getter.Test(self)\n    return self._button.Text\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nprint(myButton.Test)\nmyButton.Test = \"Hello World\"\nprint(myButton.Test)\n

Overwite Option .UpdateTriggers.<PropertyName> = boolean?

\ud574\ub2f9 \uac12\uc744 \ubcc0\uacbd\ud558\uba74 Update \uac00 \uc218\ud589\ub420\uc9c0 \uc5ec\ubd80\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\nlocal count = 0\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    print(\"Rendering!\")\n    count = count + 1\n    return TextButton {\n        self \"_button\";\n        Name = tostring(count);\n    }\nend\nfunction myClass:AfterRender(object)\n    print(self._button.Name)\nend\n-- \uac12 \ubcc0\uacbd\uc2dc \uc5c5\ub370\uc774\ud2b8 \uc5ec\ubd80\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4\nmyClass.UpdateTriggers.Test = true\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton.Test = 1 -- update\nmyButton.Test = 1 -- update\nmyButton.Test = 1 -- update\n

Overwite Option :Unload(object)

:Destroy \uac00 \ud638\ucd9c\ub420 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ub530\ub85c \uc120\uc5b8\ud558\uc9c0 \uc54a\uc544\ub3c4 \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. object \ub294 :Render \uac00 \ubc18\ud658\ud55c \uac12\uc785\ub2c8\ub2e4

:GetPropertyChangedSignal(propertyName:string)->Bindable

\uac12 \ubcc0\uacbd\uc744 \uc5f0\uacb0\ud560 \uc218 \uc788\ub294 Bindable\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. :EmitPropertyChangedSignal \uc73c\ub85c \uc774 \uc2dc\uadf8\ub110\uc744 \uc791\ub3d9\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud3b8\uc758\uc0c1 \uc774 \uc2dc\uadf8\ub110\uc774 \uc791\ub3d9\ud560 \ub54c, \uc0c8\ub85c\uc6b4 \uac12\uc774 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

:EmitPropertyChangedSignal(propertyName:string,changedValue:any?)

\ud504\ub85c\ud37c\ud2f0 \ubcc0\uacbd\uc2dc :GetPropertyChangedSignal \uc5d0 \ub4f1\ub85d\ub41c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \uc774 \ud568\uc218\ub97c \ud638\ucd9c\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c self.a = 1 \uacfc \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \ubc14\ub85c \uac12\uc744 \uc124\uc815\ud558\ub294 \uacbd\uc6b0 \uc790\ub3d9\uc801\uc73c\ub85c \uc774 \ud568\uc218\uac00 \uc2e4\ud589\ub418\uc9c0\ub9cc, \ud14d\uc2a4\ud2b8 \ubc15\uc2a4\uc758 \ud14d\uc2a4\ud2b8 \ucc98\ub7fc \uac1d\uccb4\uc758 \ubcc0\uacbd\uc0ac\ud56d\uc744 \uc5f0\ub3d9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0 \uc774 \ud568\uc218\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. changedValue \ub294 \uc120\ud0dd\uc0ac\ud56d\uc774\uba70, \uc8fc\uc5b4\uc9c0\uc9c0 \uc54a\uc73c\uba74 self[propertyName]\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_box\";\n        Text = \"test\";\n        Size = UDim2.fromOffset(200,200);\n        [Evnet.Prop \"Text\"] = function (this,newValue)\n            self:EmitPropertyChangedSignal(\"Text\",newValue)\n        end;\n        -- [Evnet.Prop \"Text\"] = self \"Text\" \uc640 \ub3d9\uc77c\ud569\ub2c8\ub2e4.\n        -- self(name:string) \ubb38\ubc95\uc73c\ub85c \ubcc0\uacbd \uc774\ubca4\ud2b8 \uc5ed\uc2dc \ub9c1\ud06c\n        -- \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n    }\nend\nfunction myClass.Getter.Text(self)\n    return self._box.Text\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported()\nmyButton:GetPropertyChangedSignal(\"Text\"):Connect(function()\n    print(myButton.Text)\nend)\nMount(ScreenGUI, myButton)\n

Event .ChildAdded:Connect((child)->())->Connection

\uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uac00 \ucd94\uac00\ub420 \ub54c \ubc1c\uc0dd\ud558\ub294 \uc774\ubca4\ud2b8\uc785\ub2c8\ub2e4. :Init \ub610\ub294 :AfterRender \uc5d0\uc11c \uc0ac\uc6a9\ud558\uba74 \uc635\uc158\uc73c\ub85c \ub123\uc740 \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uac00 \uc774 \uc774\ubca4\ud2b8\ub97c \ud1b5\ud574 \uc5bb\uc5b4\uc9c8 \uc218 \uc788\uc73c\uba70, \ucd94\ud6c4 Mount \ub97c \ud1b5\ud574 \ucd94\uac00\ub418\ub294 \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8 \ub610\ud55c \uc774 \uc774\ubca4\ud2b8\ub85c \uc5bb\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_holder\";\n    }\nend\nfunction myClass:AfterRender()\n    self.ChildAdded:Connect(function(child)\n        print(child.Name)\n    end)\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported{\n    -- Init \uc5d0 ChildAdded \ub97c \ub123\uc740\uac83\uc774 \uc544\ub2c8\uae30 \ub54c\ubb38\uc5d0 \ucd9c\ub825\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n    -- \uadf8\ub7ec\ub098 AfterRender \uc5d0 :GetChildren \uc744 \ub123\uc5b4 \uc774 \uc624\ube0c\uc81d\ud2b8\ub97c\n    -- \uc5bb\uc5b4\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n    TextButton { Name = \"Hello \"};\n}\n\nMount(myButton, TextButton{ Name = \"Hello\" })\nMount(myButton, TextButton{ Name = \"World\" })\n

:GetChildren()

\uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \uac00\uc838\uc624\ub294 \ud568\uc218\uc785\ub2c8\ub2e4. :Init() \uc640 :AfterRender() \uc5d0\uc11c\ub294 \ube48 \ud14c\uc774\ube14\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \uc790\uc2dd\uc758 \uc21c\uc11c\ub294 \uc77c\uc815\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Evnet = Quad.Event\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myClass = Class.Extend()\nfunction myClass:Render(props)\n    return TextButton {\n        self \"_holder\";\n    }\nend\nfunction myClass:AfterRender()\n    for i,v in ipairs(self:GetChildren()) do\n        print(v.Name)\n    end\nend\n\nlocal myImported = Class(myClass)\nlocal myButton = myImported{\n    TextButton { Name = \"Hello World\"};\n}\n\n-- \ub098\uc911\uc5d0 \ucd94\uac00\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub294 \ucd9c\ub825\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\nMount(myButton, TextButton{ Name = \"Hello\" })\nMount(myButton, TextButton{ Name = \"World\" })\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

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 "},{"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. Tween \uc548\uc758 \ubaa8\ub4e0 \ud568\uc218\uc640 \uac12\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.

Tween.RunTween(Item:any, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)->TweenHandler

\ud2b8\uc708\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4. \ud2b8\uc708 \uc635\uc158\uc5d0 \ub300\ud55c \uc815\ubcf4\ub294 TweenOptions \ubb38\uc11c\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Ended, OnStepped, Setter, Getter \uac12\uc774 \uc124\uc815\ub418\uba74 Option \uc548\uc758 \uac12\ubcf4\ub2e4 \uc6b0\uc120\uc801\uc73c\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uae30\ub2a5\uc740 TweenOptions\uc758 \ub0b4\uc6a9\uacfc \uac19\uc2b5\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ud2b8\uc708\uc744 \uc911\ub2e8\uc2dc\ud0ac \uc218 \uc788\ub3c4\ub85d TweenHandler \uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4. \ub2e4\ub978 \ud2b8\uc708\uc774 \ubcc0\uacbd\uc911\uc778 \uc18d\uc131\uc774 \ub2e4\uc2dc \ud2b8\uc708\ud558\ub3c4\ub85d \ud638\ucd9c\ub418\uba74, \uc774\uc804 \ud2b8\uc708\uc5d0\uc11c \ud574\ub2f9 \uc18d\uc131\uc740 \ud2b8\uc708\uc774 \uc911\ub2e8\ub418\uba70 \uc0c8\ub85c\uc6b4 \ud2b8\uc708\uc73c\ub85c \ub36e\uc5b4\uc4f0\uae30 \ub429\ub2c8\ub2e4.

Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n

Tween.RunTweens(Items:{[number]:any}, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)

Tween.RunTween \uc640 \uac19\uc73c\ub098 \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub97c \ud55c\uaebc\ubc88\uc5d0 \ud2b8\uc708\ud569\ub2c8\ub2e4. \uc544\ubb34\uac83\ub3c4 \ubc18\ud658\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4

Tween.RunTween({myFrame1, myFrame2, myFrame3},{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n

Tween.StopTween(ItemOrHandler:TweenHandler|any)

\ud2b8\uc708\uc744 \uba48\ucda5\ub2c8\ub2e4. TweenHandler \ub610\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\uc5b4 \uba48\ucd9c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\uc73c\uba74 \uadf8 \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc2e4\ud589\uc911\uc778 \ubaa8\ub4e0 \ud2b8\uc708\uc744 \uba48\ucda5\ub2c8\ub2e4.

TweenHandler \uc774\uc6a9\uc624\ube0c\uc81d\ud2b8 \uc774\uc6a9
local Handler = Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n\nTween.StopTween(Handler)\n
local Handler = Tween.RunTween(myFrame,{\n    Time = 1;\n},{\n    Position = UDim2.new(1,0,1,0);\n})\n\nTween.StopTween(myFrame)\n

Tween.StopPropertyTween(Item:any, PropertyName:string)

\uc624\ube0c\uc81d\ud2b8\uc5d0 \ud2b9\uc815 \ud504\ub85c\ud37c\ud2f0\uc758 \ud2b8\uc708\uc744 \uc911\ub2e8\uc2dc\ud0b5\ub2c8\ub2e4. TweenHandler \ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Tween.StopPropertyTween(ItemOrHandler:IsTweening|any)->boolean

\ud574\ub2f9 \uc624\ube0c\uc81d\ud2b8 \ub610\ub294 TweenHandler \ub85c \ud2b8\uc708\uc774 \uc9c4\ud589\uc911\uc778\uc9c0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud569\ub2c8\ub2e4.

Tween.IsPropertyTweening(Item:any, PropertyName:string)

\ud574\ub2f9 \uc624\ube0c\uc81d\ud2b8\uc758 \ud504\ub85c\ud37c\ud2f0\uac00 \ud2b8\uc708\uc911\uc774\uc9c0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud569\ub2c8\ub2e4. TweenHandler \ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Tween.Easings: { [string]: EasingFunction }

\uc774\uc9d5 \ud568\uc218\ub4e4\uc774 \ub2f4\uaca8\uc788\uc2b5\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
\uadf8\ub798\ud504\uc640 \ubbf8\ub9ac\ubcf4\uae30\ub294 Easings \uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

Tween.Easings: { [string]: EasingFunction }

\uc774\uc9d5 \ud568\uc218\ub4e4\uc774 \ub2f4\uaca8\uc788\uc2b5\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
\uc790\uc138\ud55c \uc815\ubcf4\ub294 Easings \uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\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.

  1. 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.
  2. \uac00\ubcc0 \ud06c\uae30\uc758 UI \ub97c \uc5c5\ub370\uc774\ud2b8 \uc2dc\ud0a4\ub294 \uacbd\uc6b0.
  3. \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \ud55c\uaebc\ubc88\uc5d0 \ud2b8\uc708\uc2dc\ud0a4\ub294 \uacbd\uc6b0.
  4. \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
\uc8fc\uc758

\uad6c\ud604\uc758 \ubcf5\uc7a1\uc131\uc758 \uc774\uc720\ub85c \ub808\uc9c0\uc2a4\ud130\ub294 \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc\uc5d0\ub9cc \ub4f1\ub85d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local myFrame = Frame{}\nFrame.BackgroundColor3 = myStore \"color\"\n
\uc704\ucc98\ub7fc \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

local myFrame = Frame{}\nApply (myFrame) {\n    BackgroundColor3 = myStore \"color\";\n}\n
  1. \uc2a4\ud1a0\uc5b4\ub97c \uc0dd\uc131\ud568.
  2. \uae30\ubcf8 \uac12\uc744 \uc124\uc815\ud568.
  3. \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

: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.

:Observe((newValue:any)->())

:Register\uc758 \uac04\uc18c\ud654 \ubc84\uc804\uc785\ub2c8\ub2e4. :Register\uc640 \ub2e4\ub974\uac8c \uc790\ub3d9\uc801\uc73c\ub85c \ub4e4\uc5b4\uac04 \ud568\uc218\ub97c GC \ub85c \ubd80\ud130 \ubcf4\ud638\ud558\uae30 \ub54c\ubb38\uc5d0 \ub4e4\uc5b4\uac04 \ud568\uc218\ub97c \ub530\ub85c \uc800\uc7a5 \ud560 \ud544\uc694\uac00 \uc5c6\uc73c\uba70, \uc778\uc790\ub294 newValue \ud558\ub098\ub9cc \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4.

newValue \ub294 :Add, :With, :Tween, :Default \uac00 \uacc4\uc0b0\ub41c \uc0c1\ud0dc\ub85c \uc81c\uacf5\ub429\ub2c8\ub2e4.

\uac04\ub7b5\ud55c \uc6a9\ubc95
myStore.test = 1\nmyStore \"test\":Add(1):Observe(function(_,newValue)\n    -- \uac12 \ubcc0\uacbd\uc2dc \ucd9c\ub825\ub429\ub2c8\ub2e4\n    print(newValue)\nend)\nmyStore.test = 2\n
"},{"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)->register \ub85c UI \uc5d0 \uc801\uc6a9\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4.

Lang.Locales.Default \ub294 \uc77c\uce58\ud558\ub294 \uc5b8\uc5b4\uac00 \uc5c6\uc744\ub54c \ubcf4\uc5ec\uc904 \uc5b8\uc5b4\uc785\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c \uc601\uc5b4\ub97c \ucd94\ucc9c\ud569\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
Lang.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
\uc8fc\uc758

\uad6c\ud604\uc758 \ubcf5\uc7a1\uc131\uc758 \uc774\uc720\ub85c Lang \uc740 \ub808\uc9c0\uc2a4\ud130\uc640 \uac19\uc740 \uc81c\uc57d\uc744 \uac00\uc9d1\ub2c8\ub2e4 (\uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc\uc5d0\ub9cc \ub4f1\ub85d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4)

local myLabel = TextLabel{}\nLang.new(\"Test\",{ [Lang.Locales.Default] = \"{lang}\" })\nmyLabel.Text = Lang \"Test\" { lang = 1 }\n
\uc704\ucc98\ub7fc \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

\ub300\uc2e0\uc5d0 :Register \ubb38\ubc95\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub4f1\ub85d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local myLabel = TextLabel{}\nLang.new(\"Test\",{ [Lang.Locales.Default] = \"{lang}\" })\nApply (myLabel) {\n    Text = Lang \"Test\" { lang = 1 };\n}\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.gz b/docs/kr/sitemap.xml.gz index b295c19..b30d121 100644 Binary files a/docs/kr/sitemap.xml.gz and b/docs/kr/sitemap.xml.gz differ diff --git a/docs/kr/tutorial/8_register/index.html b/docs/kr/tutorial/8_register/index.html index bea91a6..b1004df 100644 --- a/docs/kr/tutorial/8_register/index.html +++ b/docs/kr/tutorial/8_register/index.html @@ -1710,6 +1710,30 @@

Register 안에 들어간 함수는 GC 안정성을 위해서 약한 참조로 저장됩니다. 따라서 함수를 저장해야합니다.

+
+

:Observe((newValue:any)->())

+
+

:Register의 간소화 버전입니다. :Register와 다르게 자동적으로 들어간 함수를 GC 로 부터 보호하기 때문에 들어간 함수를 따로 저장 할 필요가 없으며, 인자는 newValue 하나만 주어집니다.

+

newValue:Add, :With, :Tween, :Default 가 계산된 상태로 제공됩니다.

+
+
+
+
1
+2
+3
+4
+5
+6
myStore.test = 1
+myStore "test":Add(1):Observe(function(_,newValue)
+    -- 값 변경시 출력됩니다
+    print(newValue)
+end)
+myStore.test = 2
+
+
+
+
+
diff --git a/md/kr/include/register.md b/md/kr/include/register.md index cc004f0..3fb4d08 100644 --- a/md/kr/include/register.md +++ b/md/kr/include/register.md @@ -303,3 +303,26 @@ myStore.color = Color3.fromRGB(0,255,0) Register 안에 들어간 함수는 GC 안정성을 위해서 약한 참조로 저장됩니다. 따라서 함수를 저장해야합니다. +--- + +`#!ts :Observe((newValue:any)->())` +
+ +`#!ts :Register`의 간소화 버전입니다. `:Register`와 다르게 자동적으로 들어간 함수를 GC 로 부터 보호하기 때문에 들어간 함수를 따로 저장 할 필요가 없으며, 인자는 `newValue` 하나만 주어집니다. + +`newValue` 는 `:Add`, `:With`, `:Tween`, `:Default` 가 계산된 상태로 제공됩니다. + +=== "간략한 용법" + + ```lua + myStore.test = 1 + myStore "test":Add(1):Observe(function(_,newValue) + -- 값 변경시 출력됩니다 + print(newValue) + end) + myStore.test = 2 + ``` +
+ + + diff --git a/src/store.lua b/src/store.lua index 72691de..c10340b 100644 --- a/src/store.lua +++ b/src/store.lua @@ -220,6 +220,24 @@ function module.init(shared) end return efunc end; + Observe = function(s,efunc) + local self = s.store + local events = self.__evt + local function update(_,newValue,key) + local value = s:CalcWithNewValue(self,newValue,key) + efunc(value) + end + insert(self.__keep,update) + for key in gmatch(s.key,"[^,]+") do + key = gsub(gsub(key,"^ +","")," +$","") + local event = events[key] + if not event then + event = setmetatable({},week) + events[key] = event + end + insert(event,update) + end + end; With = function (s,wfunc) -- s.wfunc = wfunc -- return s