1
diff --git a/docs/kr/search/search_index.json b/docs/kr/search/search_index.json
index 38e62ee..04a519d 100644
--- a/docs/kr/search/search_index.json
+++ b/docs/kr/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":[" "]},"docs":[{"location":"","title":"Quad","text":"\ucc98\uc74c\uc624\uc168\ub098\uc694? \ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c\ub97c \uc77d\uc5b4\ubcf4\uc138\uc694! \ucc98\uc74c\ubd80\ud130 \ucc28\uadfc\ucc28\uadfc Quad \ubaa8\ub4c8\uc744 \uc815\ubcf5\ud560 \uc218 \uc788\uc5b4\uc694
"},{"location":"#_1","title":"\ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c \ubaa9\ucc28","text":""},{"location":"#api","title":"API \ub808\ud37c\ub7f0\uc2a4","text":"class __call, import class extend private ~~make~~
event __call prop created createdSync disconnecter private ~~bind~~
mount __call mount => mountClass|mountsClass class mountClass|mountsClass
store getObject getObjects => objectList addObject class objectList class store
style private ~~parseStyles~~ __call new
tween (from @qwreey75:AdvancedTween)
"},{"location":"#_2","title":"\uc9c4\ud589\uc911\uc774\uac70\ub098 \uac80\ud1a0\uc911","text":""},{"location":"#spring","title":"Spring","text":"Spring \ubb3c\ub9ac \uacc4\uc0b0\uc744 UI \uc560\ub2c8\uba54\uc774\uc158\uc5d0 \uc801\uc6a9\ud569\ub2c8\ub2e4 WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#quad-debuger","title":"Quad Debuger","text":"Register \uc758 \uc0c1\ud0dc\uc640 Store \uc758 \uac12, Class \uc758 \ub3d9\uc791 \uc5ec\ubd80 \ub4f1 Quad \uc758 \uc5ec\ub7ec \uc790\uc6d0\uc744 \uae34\ubc00\ud558\uac8c \ub514\ubc84\uadf8\ud569\ub2c8\ub2e4. WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#selection","title":"Selection","text":"Tab \ud0a4\ub4f1\uc73c\ub85c \ubc84\ud2bc \uc120\ud0dd\ud558\uae30 (... \uac00\ub2a5\ud568?) WIP. \uac80\ud1a0\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#quad-component-studio","title":"Quad Component Studio","text":"\ub208\uc5d0 \ubcf4\uc774\ub294 \uc6cc\uc9c0\uc6cc\uadf8\uc2dd \ud3b8\uc9d1\uae30\ub97c \uc774\uc6a9\ud574 Quad Class \ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#quad-webrender","title":"Quad WebRender","text":"HTML, CSS, JS \ub85c\uc368 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ubcc0\ud615\ud574 \uc2a4\ud29c\ub514\uc624 \uc5c6\uc774 \uac1c\ubc1c\ud558\ub294 \uac00\ubcbc\uc6b4 \uac1c\ubc1c\ubc95\uc785\ub2c8\ub2e4. WIP. \uac80\ud1a0\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"changelogs/","title":"\ubc84\uc804 \ubc88\uacbd\uc0ac\ud56d","text":""},{"location":"changelogs/#222","title":"2.22","text":"\ub354\uc774\uc0c1 Event.Prop \uac00 \ucc98\uc74c \uc0dd\uc131\uc2dc \uc2e4\ud589\ub418\ub294 \uc77c\uc774 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#221","title":"2.21","text":"Linker \uac00 \uc774\uc81c \ud074\ub798\uc2a4 \uc548 \ud074\ub798\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ub420 \uc218 \uc788\ub3c4\ub85d \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#220","title":"2.20","text":"Docments \uac00 \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub9ce\uc740\uc591\uc758 \uc0c8\ub85c\uc6b4 \ud29c\ud1a0\ub9ac\uc5bc\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4. Mkdocs \ud14c\ub9c8\uc640 \uc5ec\ub7ec\uac00\uc9c0 \uc124\uc815\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c Makefile \uc744 \ud1b5\ud574\uc11c rojo build \uc640 mkdocs build \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#219","title":"2.19","text":"Linker \uac1d\uccb4\uac00 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c GetPropertyChangedSignal \uc640, self \uc5d0 \ud2b9\uc815 \uc624\ube0c\uc81d\ud2b8 \ud639\uc740 \uc774\ubca4\ud2b8\ub97c \uc5f0\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#218","title":"2.18","text":"\uc774\uc81c \ub354\uc774\uc0c1 GC \uc5d0 \uc758\ud574 Store \uc758 Instance \uac12\uc774 \uc190\uc2e4\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#217","title":"2.17","text":"Tween \uc758 CallBack \ub4f1\ub85d \uc2dc \uc8fc\uc5b8\uc9c0\ub294 \ud30c\ub77c\uba54\ud130\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ub354\uc774\uc0c1 ~ \ubb38\uc774 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#215-breaking-changes","title":"2.15 BREAKING CHANGES","text":"\uc774\uc81c Lang \uc5d0\uc11c CurrentLocale, FailedMessage \uc744 \ubcc0\uacbd\ud558\uba74 \uc790\ub3d9\uc73c\ub85c \ubcc0\uacbd\uc0ac\ud56d\uc774 \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4. \ub610\ud55c \uc77c\ubd80 \ud544\ub4dc\uc758 \ub124\uc774\ubc0d\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#214","title":"2.14","text":"Lang \ubaa8\ub4c8\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. register \ub97c \uc0ac\uc6a9\ud574 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ub2e4\uc911\uc5b8\uc5b4 \uc9c0\uc6d0\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#213","title":"2.13","text":"Signal \ubaa8\ub4c8\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c Class.Extend \uc5d0\uc11c GetPropertyChangedSignal \uacfc EmitPropertyChangedSignal \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#212","title":"2.12","text":"Mount \ubc18\ud658 \uac1d\uccb4\uc5d0 Add \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d Mount \uac1d\uccb4\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#211","title":"2.11","text":"Store.GetObjects \uc5d0 \uc774\uc81c & \ubb38\ubc95\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#29","title":"2.9","text":"PreloadAsync \ub97c \ud1b5\ud574 \uc774\uc81c round.lua \uc5d0\uc11c \ub77c\uc6b4\ub4dc \uc774\ubbf8\uc9c0\ub97c \ubbf8\ub9ac \ub85c\ub4dc\ud569\ub2c8\ub2e4.
"},{"location":"changelogs/#28","title":"2.8","text":"\ubc18\ud658 \uad00\ub828 \ucf54\ub4dc\uac00 exports \ub85c \uc774\uc8fc\ub418\uc5c8\uc73c\uba70. init.lua \uc5d0\uc11c\ub294 \uc790\ub3d9\uc801\uc73c\ub85c types \ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.
"},{"location":"changelogs/#27","title":"2.7","text":"\uc774\uc81c types \ub97c \uc644\uc804\ud788 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc9c1\uc811 \ubd88\ub7ec\uc640 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#2126-breaking-changes","title":"2.1~2.6 BREAKING CHANGES","text":"\ubaa8\ub4e0 \ubaa8\ub4c8\uc758 \ud544\ub4dc\uc758 \uc774\ub984\uc774 \ubcc0\uacbd\ub418\uc5c8\uc73c\uba70, \ubaa8\ub4e0 \ud074\ub798\uc2a4\ub4e4\uc774 \uae30\ubcf8\uc801\uc73c\ub85c \ub300\ubb38\uc790 \uc2dc\uc791 \ub124\uc774\ubc0d\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \uba85\uba85\uaddc\uce59\uc744 \ubcc0\uacbd\ud588\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#20","title":"2.0","text":"\ubc84\uc804 \ud310\uc62c\ub9bc, BREAKING CHANGES \ub97c \uc704\ud574 \ubc84\uc804\uc744 \ud310\uc62c\ub9bc \ud558\uc600\uc2b5\ub2c8\ub2e4.
"},{"location":"license/","title":"\ub77c\uc774\uc120\uc2a4","text":"\uc65c\uc548\ub428KoreanEnglish \uc65c \uc548\ub3cc\uc544\uac00\ub0d0
\uc65c \uc548\ub3cc\uc544\uac00\ub0d0
qwreeykawaii license v1.3\nCopyright 2023. Qwreey [qwreey75@gmail.com]\n\n\uc774 \ub77c\uc774\uc120\uc2a4\ub294 DBAD \ub77c\uc774\uc120\uc2a4\ub97c \uae30\ubc18\uc73c\ub85c \ud569\ub2c8\ub2e4.\n\ub204\uad6c\ub4e0\uc9c0 \uc774 \ub77c\uc774\uc120\uc2a4 \ubb38\uc11c\uc758 \uc6d0\ubcf8 \ud639\uc740 \uc218\uc815\ubcf8\uc744\n\ubcf5\uc0ac, \ud3b8\uc9d1, \ubc30\ud3ec \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\nqwreeykawaii \ub77c\uc774\uc120\uc2a4\uc758 \ubcf5\uc0ac \ubc30\ud3ec \ubc0f \uc218\uc815\uc5d0\n\uad00\ud55c \uaddc\uc815\uacfc \uc870\uac74.\n\n1. \ub2f9\uc2e0\uc740 \uc774 \uadc0\uc5ec\uc6b4 \ucc3d\uc791\ubb3c\uc744 \uac00\uc9c0\uace0 \uc5b4\ub5a0\ud55c\n\uac83\uc774\ub4e0 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e8, \ubb34\ub840\ud558\uc9c0 \ub9c8\uc138\uc694.\n\ubb34\ub840\ud55c \ud589\ub3d9\uc740 \ud1b5\uc0c1\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\n\n\uac00. \uadc0\uc5ec\uc6b4 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc5b4\ub5a0\ud55c \uac00\uacf5\ub3c4 \uc5c6\uc774\n \ubcf5\uc81c\ud558\uac70\ub098, \uc774\ub984\ub9cc \ubc14\uafb8\ub294 \uac83\uc740 \ubb34\ub840\ud558\uba70\n \ub178\uace8\uc801\uc778 \uc800\uc791\uad8c \uce68\ud574\uc785\ub2c8\ub2e4.\n\ub098. \uadc0\uc5ec\uc6b4 \uc774 \ucc3d\uc791\ubb3c\uc5d0 \uc74c\ub780\uc131 \ud639\uc740 \uc720\ud574\ud55c\n \ucf58\ud150\uce20\ub97c \ud3ec\ud568\uc2dc\ud0a4\ub294 \uac83\uc740 \ubb34\ub840\ud569\ub2c8\ub2e4.\n \uadc0\uc5ec\uc6b4 \ucf58\ud150\uce20\ub85c \ub2e4\ub978\uc774\ub97c \ud574\uce58\uc9c0 \ub9c8\uc2ed\uc2dc\uc624.\n\n\uadf8\ub7ec\ub098 \uc774\uc5d0\ub9cc \uad6d\ud55c\ub418\ub294\uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4.\n\ubb34\uc5c7\ubcf4\ub2e4\ub3c4, \uadc0\uc5ec\uc6b4 \ud0c0\uc778\uc744 \uc0c1\ucc98\uc8fc\uc9c0 \ub9c8\uc138\uc694.\n\n2. \ub2f9\uc2e0\uc774 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc0ac\uc6a9\ud574 \ub9ce\uc740 \uc774\ub4dd\uc744 \ubcf8\n\uacbd\uc6b0, \uadc0\uc5ec\uc6b4 \ucc3d\uc791\uc790\uc5d0\uac8c \uc0ac\ub791\uc744 \ubc30\ud478\uc138\uc694.\n\uc778\uac04\uc801\uc778 \uc0ac\ub78c\uc740 \uadc0\uc5ec\uc6b4 \uc0ac\ub78c\ub4e4\uc744 \uc678\uba74\ud558\uc9c0\n\uc54a\uc2b5\ub2c8\ub2e4. \ub2f9\uc2e0\uc758 \ucee4\ud53c \ud55c\uc794\uc744 \ub098\ub220\uc8fc\uc138\uc694.\n\n3. \uc774 \ucc3d\uc791\ubb3c\uc740 \uc5b4\ub5a0\ud55c \ubcf4\uc99d \uc5c6\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.\n\uc774 \ucc3d\uc791\ubb3c\uc744 \uc0ac\uc6a9\ud558\ub2e4, \ucc3d\uc791\uc790\uc758 \uadc0\uc5ec\uc6b4\n\uc2e4\uc218\ub85c \uc778\ud574 \ubb34\uc5b8\uac00 \uc798\ubabb\ub418\uc5c8\ub2e4\uba74, \ubb38\uc81c\ub97c \uc9c1\uc811\n\ud574\uacb0\ud558\uc138\uc694. \ubb34\ub840\ud558\uc9c0 \uc54a\uc740 \uc0ac\ub78c\uc740 \uc801\uc5b4\ub3c4\n\uadc0\uc5ec\uc6b4 \ud0c0\uc778\ub4e4\uc744 \ube44\ub09c\ud558\uac70\ub098 \ubaa8\uc695\ud558\uc9c0\ub294 \uc54a\uc73c\uba70\n\uc218\uc815\ubcf8\uc744 \uc81c\ucd9c\ud558\uac70\ub098 \ubc84\uadf8\ub9ac\ud3ec\ud2b8\ub97c \uc81c\ucd9c \ud560\n\uac83\uc785\ub2c8\ub2e4.\n\n4. \ub2f9\uc2e0\uc774 \uc774 \uadc0\uc5ec\uc6b4 \ucc3d\uc791\ubb3c\uc744 \ud65c\uc6a9\ud574 \ub2e4\ub978 \ucc3d\uc791\ubb3c\n\uc744 \ub9cc\ub4e4\uace0 \uc2f6\uc740 \uacbd\uc6b0 \uc801\uc5b4\ub3c4 \uc0ac\uc6a9\ud588\ub2e4\ub294 \uace0\uc9c0\ub294\n\ub0a8\uaca8\uc8fc\uc138\uc694. \uadc0\uc5ec\uc6b4 \ucc3d\uc791\uc790\ub4e4\uc740 \uc790\uc2e0\uc758 \ucc3d\uc791\ubb3c\uc774\n\uc88b\uc740\uacf3\uc5d0 \uc0ac\uc6a9\ub418\uc5c8\uc74c\uc744 \uae30\ubed0\ud560 \uac83\uc785\ub2c8\ub2e4.\n* \uc774\ub294 \uad8c\uace0 \uc0ac\ud56d\uc785\ub2c8\ub2e4. \ud544\uc218\uac00 \uc544\ub2c8\uba70 \ubd88\uac00\ud53c\ud55c\n \uacbd\uc6b0 \ubb34\uc2dc\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n\n5. \ub7ec\uc2dc\uc544 \uad6d\uc801\uc758 \uc774\ub4e4\uc740 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc601\ub9ac \ubaa9\uc801\uc73c\ub85c\n\uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. - \uc6b0\ub9ac\ub294 \uc804\uc7c1\uc790\uae08\uc744\n\uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uac19\uc740 \uc774\uc720\ub85c\uc368, \uc804\uc7c1\uc774 \uc9c0\uc6d0\ub420 \uc218 \uc788\ub294 \uacf3\uc5d0\uc11c\uc758\n\uc774 \ucc3d\uc791\ubb3c \uc0ac\uc6a9\uc744 \ud5c8\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n qwreeykawaii license v1.3\n\nCopyright 2023. Qwreey [qwreey75@gmail.com]\n\nThis license is based on DBAD license.\nEveryone is permitted to copy and distribute\nverbatim or modified copies of this license\ndocument.\n\nTERMS, AND CONDITIONS FOR COPYING,\nDISTRIBUTION, AND MODIFICATION\n\n1. You can do anything with this original work,\nbut don't be rude\n\nIn general, being rude includes below\n\nFirst. Do not copy these cute works without\n any modification. changing the name\n only is outright copyright infringement\nSecond. Do not add some harmful or NSFW content.\n It's very rude and may harm others\n\nBeing rude is not limited to these instances.\nAbove all, don't hurt cute people\n\n2. If you get any benefit or profit from these cute\nworks, Share the love. A polite person may share\nthe love with cute people.\n3. These cute works are provided with no warranty.\nIf something goes wrong due to the creator's cute\nmistake, Fix it yourself. A polite person may\nsubmit the fix or bug report.\n4. If you create something with these works, Leave\nthe original creator's name in your work.\nthe cute creator will be happy if their works are\nused for good.\n* This is a recommendation. Not required.\n5. Russian nationality can not use this creation for\ncommercial purposes. \u2014 We do not support the war.\nSame reason, This creation cannot be used where\nit can support the war.\n "},{"location":"include/TweenOptions/","title":"TweenOptions","text":"export type TweenOptions = {\nEasing: \"Linear\"\n|\"Quint\"\n|\"Quart\"\n|\"Cubic\"\n|\"Quad\"\n|\"Sin\"\n|\"Circle\"\n|\"Expo\"\n|\"Elastic\"\n|\"Bounce\"\n|\"Exp2\"\n|\"Exp4\"\n|EasingFunction?;\nDirection: \"Out\"|\"InOut\"|\"In\"|EasingDirection?;\nCallBack: {[number|\"*\"|string]:(Item:DOM|any,Alpha:number,AbsolutePercent:number)->()}?;\nOnStepped: TweenOnStepped?;\n// \uc77c\ubc18\uc801\uc73c\ub85c CallBack \uc5d0 ['*']=()->() \ub97c\n// \ub4f1\ub85d\ud558\ub294\uac83\uacfc \uac19\uc73c\ub098 \uc131\ub2a5\uc0c1\uc758 \uc774\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4\nEnded: TweenEnded?;\nGetter: TweenGetter?;\nSetter: TweenSetter?;\nTime: number?;\n}\n "},{"location":"include/direction/","title":"Direction","text":"Out \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.
In \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.
InOut \uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.
"},{"location":"include/easings/","title":"Easings","text":" \ubaa8\ub4e0 Easing \uc740 \uc5ec\uae30\uc5d0\uc11c \uc9c1\uc811\uc801\uc73c\ub85c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
Linear
\uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615 \ud568\uc218\uc785\ub2c8\ub2e4
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
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
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
Quad
\uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
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.
Sin
\uc0ac\uc778 \ud30c\ud615\uc744 \uc0ac\uc6a9\ud55c \ud568\uc218\uc785\ub2c8\ub2e4.
Circle
\uc6d0\ud615 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
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\uae40\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\nFrame {\n [Event \"MouseEnter\"] = function (self)\n print(self.Name .. \"\uc5d0 \ub9c8\uc6b0\uc2a4\uac00 \uc62c\ub77c\uc654\uc2b5\ub2c8\ub2e4\")\n end;\n}\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.
\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.
-- \uc6a9\ubc95\nFrame {\n [Event.Created] = function (self)\n print(self.Name .. \"\uc774 \uc0dd\uc131\ub418\uc5c8\uc5b4\uc694\")\n end;\n}\n 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.
\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.
-- \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 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/mounts/","title":"Mounts","text":":Unmount()
\uc774\ub807\uac8c \ud558\uba74 \ub9c8\uc6b4\ud2b8\ub41c Instance \ub97c \uc9c0\uc6cc\ubc84\ub9bd\ub2c8\ub2e4. Quad \ub294 \uc548\uc804\ud55c \uba54\ubaa8\ub9ac \uad00\ub9ac\ub97c \uc704\ud574 gc \uc758 \uae30\ub2a5\uc5d0 \uc758\uc874\ud558\ubbc0\ub85c, gc \uc2dc\uac04\ucc28\ub85c \uc778\ud574 Store.GetObject \uc5d0\uc11c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0ac\ub77c\uc9c0\ub294\ub370 \uc2dc\uac04\uc774 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui,mainFrame)\n\nlocal childFrame = Frame {}\nlocal childFrameMount = Mount(mainFrame,childFrame)\nchildFrameMount:Unmount()\n-- childFrame \uc740 \ub2e8\uc21c\ud788 .Parent = nil \ub418\ub294 \uac83\uc744 \ub118\uc5b4 \uba54\ubaa8\ub9ac\uc5d0\uc11c \uc0ac\ub77c\uc9d1\ub2c8\ub2e4\n-- \uc989, Destroy() \uac00 \ud638\ucd9c\ub429\ub2c8\ub2e4\n :Add(item:any)
Mount \uc5d0 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ucc98\uc74c \uc124\uc815\ud55c to \uac12\uc744 \ub530\ub77c \ubd80\ubaa8\uac00 \uacb0\uc815\ub429\ub2c8\ub2e4.
\uc774 \ub3d9\uc791\uc740 \ub9ac\uc2a4\ud2b8\ub97c \ub9cc\ub4e4 \ub54c \uc720\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc\ub85c\ub4dc \ub3d9\uc791\uc2dc \uc9c1\uc811 \uc81c\uac70\uac00 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui, mainFrame)\n\nlocal lastListMount = Mount(mainFrame)\nlocal function refreshList()\n lastListMount:Unmount() -- \uc774\uc804 children \uc744 \uc54c\uc544\uc11c \uc81c\uac70\ud569\ub2c8\ub2e4\n for i = 1,10 do\n lastListMount:Add(Frame { Name = tostring(i) })\n end\nend\n\ntask.spawn(function()\n while true do\n refreshList()\n task.wait(2)\n end\nend)\n \ub2e4\uc74c\uacfc \uac19\uc774 \uc774\uc804 children \uc744 \uac04\uc811\uc801\uc73c\ub85c \uc81c\uac70\ud558\uace0 \uc0c8\ub85c\uc6b4 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e8 ScrollFrame \uc758 \uacbd\uc6b0 CanvasPosition\uc774 \ucd08\uae30\ud654 \ub418\uc5b4\ubc84\ub9ac\ubbc0\ub85c \uc790\uc2dd\ub4e4\uc744 :Unmount() \ud558\uae30 \uc804\uc5d0 \uc704\uce58\ub97c \uc800\uc7a5\ud558\uace0 \ub2e4\uc2dc \ubd88\ub7ec\uc640\uc57c \ud569\ub2c8\ub2e4
"},{"location":"include/objectList/","title":"objectList","text":":Each((item:any, index:number)->())
\uc77c\ubc18\uc801\uc778 \ubc18\ubcf5\uc785\ub2c8\ub2e4. for \ub97c \uc0ac\uc6a9\ud558\ub294\uac83\uacfc \ud6a8\uacfc\uac00 \uac19\uc73c\ub098 \ud568\uc218\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4
:EachAsync((item:any, index:number)->())
\ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uace0 \ubc14\ub85c\ubc14\ub85c \ub2e4\uc74c \uc544\uc774\ud15c\uc73c\ub85c \ub118\uc5b4\uac11\ub2c8\ub2e4. \ucf54\ub8e8\ud2f4\uc774 \uc774\uc6a9\ub429\ub2c8\ub2e4. wrap() \ucf54\ub8e8\ud2f4\uc744 \ubaa8\ub974\uac70\ub098, \ud544\uc694\uc131\uc774 \uc5c6\ub294\uacbd\uc6b0 \uc77c\ubc18\uc801\uc73c\ub85c :Each \ub97c \uc0ac\uc6a9\ud574\ub3c4 \ub429\ub2c8\ub2e4
:IsEmpty()
\uc774 ObjectList \uac00 \ube44\uc5b4\uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.
:Remove(indexOrItem:number|any)
objectList \uc5d0\uc11c \ud574\ub2f9\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4. , & \ub97c \uc0ac\uc6a9\ud55c \uace0\uae09 \uac80\uc0c9\uc5d0\uc11c\ub294 \uc791\ub3d9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
"},{"location":"include/quadProperty/","title":"quadProperty","text":"RoundSize:number?
ImageLabel, ImageButton \uc5d0\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc18d\uc131\uc785\ub2c8\ub2e4. \uc6d0\ud615 \uc774\ubbf8\uc9c0\uc5d0 Slice\ub97c \uc774\uc6a9\ud574 \ub465\uadfc \ud504\ub808\uc784\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c UICorner\ubcf4\ub2e4 \ubd80\ub4dc\ub7ec\uc6b4 \ucf54\ub108\ud6a8\uacfc\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.
Corner:number?
\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 UI\uc624\ube0c\uc81d\ud2b8\uc5d0 \uc801\uc6a9\ub429\ub2c8\ub2e4. UICorner\ub97c \uc774\uc6a9\ud574 \ubaa8\uc11c\ub9ac \ubd80\ubd84\uc744 \ub465\uae00\uac8c \ub9cc\ub4ed\ub2c8\ub2e4. \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
PaddingAll:UDim?
UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. \uc0c1\ud558\uc88c\uc6b0 \ubaa8\ub450 \uac19\uc740 \uac12\uc73c\ub85c \uc801\uc6a9\ub429\ub2c8\ub2e4. PaddingAllOffset \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
PaddingAllOffset:number?
UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. PaddingAll\uacfc \uac19\uc740 \ubc29\ubc95\uc73c\ub85c \uc791\ub3d9\ud558\ub098, Offset\uac12\ub9cc \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. PaddingAll \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
Scale:number?
UIScale\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. UIScale.Scale \uacfc \uac19\uc740 \ud6a8\uacfc\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4
"},{"location":"include/register/","title":"Register","text":"register \ud2b9\uc218 \uba54\uc18c\ub4dc\uac00 \uc801\uc6a9\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
:Add(value:any)->register
\uac12\uc5d0 \ub354\ud558\uae30\ub97c \ucde8\ud569\ub2c8\ub2e4. \uc74c\uc218\ud615\ud0dc\uac00 \uc81c\uacf5\ub418\ub294 \uacbd\uc6b0 \ube7c\uae30 \ucc98\ub7fc \uc791\ub3d9\ud569\ub2c8\ub2e4. number, Udim, UDim2, Color3, Vector2 \ub4f1 \ub354\ud560 \uc218 \uc788\ub294 \ubaa8\ub4e0\uac83\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 \uc8fc\uc758 : \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.pos = UDim2.fromOffset(100,0)\n\nFrame \"mainFrame\" {\n Position = myStore \"pos\":Add(UDim2.fromOffset(0,100));\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile true do\n myStore.pos = myStore.pos + UDim2.fromOffset(10,0)\n task.wait(2)\nend\n :With((store:valueStore, newValue:any, key:string)->())->register
\ud568\uc218 \ub610\ub294 \ud14c\uc774\ube14\uc5d0\uc11c \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4. Add \ubcf4\ub2e4 \ub098\uc911\uc5d0 \uc218\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4 \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
\ud568\uc218\ud14c\uc774\ube14\uc5ec\ub7ec \uac12\uc774 \ubb36\uc784 -- \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.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 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 -- \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\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\n %(#colors)\n\n\nFrame \"mainFrame\" {\n BackgroundColor3 = \n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile true do\n\n task.wait(1)\nend\n -- \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 :Tween(options:TweenOptions)
\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. \uc8fc\uc758 : \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\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)\nend\n :Default(value:any)
\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. \uc8fc\uc758 : \ucc98\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \ub54c\uc5d0\ub9cc \uc774 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\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 :Register((store:valueStore, newValue:any, key:string)->())->nil
\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
-- \uc6a9\ubc95\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\n\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.test1 = 1\nmyStore.test2 = \"Hello\"\n\nmyStore \"test1,test2\":Register(function()\n print(myStore.test1,myStore.test2)\nend)\n\nmyStore.test1 = 2\n "},{"location":"tutorial/","title":"Getting Started","text":""},{"location":"tutorial/#_1","title":"\uba38\ub9ac\ub9d0","text":"\uc774 \ud398\uc774\uc9c0\ub294 Quad \ubaa8\ub4c8\uc744 \uc27d\uac8c \uc2dc\uc791\ud560 \uc218 \uc788\ub3c4\ub85d \ud29c\ud1a0\ub9ac\uc5bc\uc744 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud398\uc774\uc9c0\ub97c \uc815\ub3c5\ud574 Quad \ubaa8\ub4c8\uc758 \uc804\ubc18\uc801\uc778 \uc0ac\uc6a9\ubc95\uc744 \ud30c\uc545\ud574\ubcf4\uc138\uc694!
\uc8fc\uc758: \uc774 \ubaa8\ub4c8\uc740 \uac1c\ubc1c \uc9c4\ud589\uc774 \ub9e4\uc6b0 \ube60\ub985\ub2c8\ub2e4. \ub9ce\uc740\uc591\uc758 \ubcc0\uacbd \uc0ac\ud56d\uc774 \uc788\uc744 \uc218 \uc788\uc73c\ubbc0\ub85c github \uc5d0\uc11c \ubcc0\uacbd\uc0ac\ud56d\uc744 \uacc4\uc18d\ud574\uc11c \ucd94\uc801\ud558\uc138\uc694
\ubcc0\uacbd \uc0ac\ud56d\uc740 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/#_2","title":"\uc124\uce58","text":""},{"location":"tutorial/#_3","title":"\ubaa8\ub4c8 \ubd88\ub7ec\uc624\uae30/\ucd08\uae30\ud654","text":"local Quad = require(path.to.module).Init()\n \ubaa8\ub4c8\uc744 \uc14b\uc5c5\ud558\uae30 \uc704\ud574\uc11c\ub294 .Init(QuadId:string?) \uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c QuadId \uac12\uc740 \ud544\uc694\ud558\uc9c0 \uc54a\uc9c0\ub9cc, \ub098\uc911\uc5d0 \uc18c\uac1c\ud560 Store \uc640 \uac19\uc740 \uc77c\ubd80 \uae30\ub2a5\ub4e4\uc774 QuadId:string \uc5d0 \uc601\ud5a5\ubc1b\uae30\ub3c4 \ud569\ub2c8\ub2e4.
.Init(QuadId:string) \ud568\uc218\ub294 QuadId \uac00 \uac19\uc740 \ubd88\ub7ec\uc624\uae30\uac00 \uc774\ubbf8 \uc788\uc5c8\ub358 \uacbd\uc6b0, \ucd08\uae30\ud654 \ud558\uc9c0 \uc54a\uace0 \ubd88\ub7ec\uc654\ub358\uac83\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \ubaa8\ub4c8\ub4e4 \ub07c\ub9ac QuadId \uac00 \uac19\uc740 \uacbd\uc6b0 Store \uc640 \uac19\uc740\uac83\uc774 \uacf5\uc720\ub429\ub2c8\ub2e4.
QuadId \uac00 \ube44\uc6cc\uc9c4 \uacbd\uc6b0 \ud55c\ubc88\ub3c4 \uc0dd\uc131\ub41c \uc801 \uc5c6\ub294 \uc0c8\ub85c\uc6b4 Quad \uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4
local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n \ubd88\ub7ec\uc624\uae30\uac00 \ub05d\ub0ac\ub2e4\uba74 \uc774\uc81c Quad \uc758 \uc790\uc6d0\ub4e4\uc744 \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4! \ub2e4\uc74c \ud398\uc774\uc9c0\ub85c \ub118\uc5b4\uac00 \uc5b4\uc11c \ud65c\uc6a9\ud574 \ubd05\uc2dc\ub2e4
"},{"location":"tutorial/#_4","title":"\ud0c0\uc785 \ubd88\ub7ec\uc624\uae30","text":"\uae30\ubcf8\uc801\uc73c\ub85c \uc774 \ubaa8\ub4c8\uc740 \ub85c\ub4dc\uc2dc \ud0c0\uc785\uc744 \ubc18\ud658\ud558\uc9c0\ub9cc. \uc9c1\uc811\uc801\uc73c\ub85c \ud0c0\uc785\uc744 \uc9c0\uc815\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 types.lua \ub97c \ubd88\ub7ec\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4
local types\n "},{"location":"tutorial/#_5","title":"\ud14c\uc2a4\ud2b8 \ud658\uacbd \uc900\ube44","text":"\ud14c\uc2a4\ud2b8 \ud658\uacbd\uc740 rojo \uc640\uc758 \uac1c\ubc1c\ud1b5\ud569\uc744 \uc704\ud574 Play \ubc84\ud2bc\uc744 \ub204\ub974\uc9c0 \uc54a\uace0 \ubbf8\ub9ac\ubcf4\uae30\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4e4\uc5b4\uc90d\ub2c8\ub2e4 \uc774\ub97c \ud1b5\ud574 \ub2e4\ub978 \ucf54\ub4dc \ubc29\uc2dd\uc758 UI \ud504\ub808\uc784 \uc6cc\ud06c\ubcf4\ub2e4 \ube60\ub978 \uac1c\ubc1c\uc18d\ub3c4\ub97c \ub2ec\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/#_6","title":"\uc790\ub3d9 \ub9ac\ub85c\ub4dc","text":"\uc8fc\uc758: rojo \ud658\uacbd\uc774 \uc544\ub2c8\ub77c\uba74 \uc790\ub3d9 \ub9ac\ub85c\ub4dc\ub294 \ub799\uc744 \ub3d9\ubc18\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
\uc77c\ubc18\uc801\uc73c\ub85c, \ub85c\uceec \ud3b8\uc9d1 \ud658\uacbd\uc5d0\uc11c \ub85c\ube14\ub85d\uc2a4\uc758 script editor \ub294 \ud55c\uae00\uc790 \ud55c\uae00\uc790 \ubcc0\uacbd\uc2dc \ub9c8\ub2e4 .Source \ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4. \uc774\ub294 \uacf3 \ud55c\uae00\uc790 \ud55c\uae00\uc790 \ud0c0\uc774\ud551 \uc2dc \ub9c8\ub2e4 UI \uac00 \uc5c5\ub370\uc774\ud2b8 \ub420 \uc218 \uc788\uc74c\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. Quad \uc758 tracker \ubaa8\ub4c8\uc740 \uc21c\uac04\uc801\uc73c\ub85c \ub9ce\uc740\uc591\uc758 \ub9ac\ub85c\ub4dc\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\ub3c4\ub85d \uc801\uc808\ud55c \ucfe8\ud0c0\uc784\uacfc \uc2dc\uac04\ubd84\ubc30\ub97c \uac00\uc9c0\uace0 \uc788\uc9c0\ub9cc, \uc774 \uacbd\uc6b0\uc5d0\ub3c4 Ctrl+S \ub97c \ub20c\ub7ec \uc800\uc7a5\ud574\uc57c \uc801\uc6a9\ub418\ub294 vscode \uc640 \uac19\uc740 \ud0c0 \ud3b8\uc9d1\uae30\uc640\ub294 \ucc28\uc774\uac00 \ub0a0 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc\uac00 \ucee4\uc9d0\uc73c\ub85c \uc778\ud574 \uc790\ub3d9 \ub9ac\ub85c\ub4dc\uc5d0\uc11c \ud37c\ud3ec\uba3c\uc2a4\uc801 \uc774\uc288\ub97c \uacaa\ub294\ub2e4\uba74, rojo \ub97c \ud65c\uc6a9\ud574 \ucf54\ub4dc\ub97c \uc678\ubd80\ub85c \uc62e\uae34 \ud6c4, vscode \ub97c \uc2a4\ud29c\ub514\uc624 \uc704\uc5d0 \ub193\uace0 \ubbf8\ub9ac\ubcf4\uae30\uc640 \ucf54\ub4dc\ub97c \ub3d9\uc2dc\uc5d0 \ubcf4\uba74\uc11c \ud3b8\uc9d1\ud558\uc138\uc694.
"},{"location":"tutorial/#_7","title":"\uc218\ub3d9 \ub9ac\ub85c\ub4dc","text":""},{"location":"tutorial/10_signal/","title":"Signal","text":"Quad \uc5d0\ub294 \ud3b8\uc758\uc0c1\uc758 \uc774\uc720\ub85c
"},{"location":"tutorial/1_import/","title":"\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
\ubd88\ub7ec\uc628 Class \uc5d0 \uae30\ubcf8\uac12\uc744 \uc124\uc815\ud560 \uc218\ub3c4 \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 {}\nprint(frame1.FrameWithBorder)\nprint(frame2.FrameWithBorder)\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":"\ud654\uba74\uc5d0 UI \ub97c \ud45c\uc2dc\ud558\uae30","text":"\uc77c\ubc18\uc801\uc73c\ub85c Quad \ubaa8\ub4c8\uc5d0\uc11c \ubaa8\ub4e0 Parent \ucc98\ub9ac\ub294 Mount \ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4. Mount(to:any,...item:any?)->mounts \ud568\uc218\ub97c \uc774\uc6a9\ud558\uba74 \ub2e4\ub8e8\ub294 \uc624\ube0c\uc81d\ud2b8\uac00 \ub85c\ube14\ub85d\uc2a4 Instance \uc778\uc9c0, \ud5a5\ud6c4 \uc18c\uac1c\ub420 Quad \ud655\uc7a5 \ud074\ub798\uc2a4\uc778\uc9c0 \uc0c1\uad00\uc5c6\uc774 \uc54c\uc544\uc11c Parent \uac00 \ucc98\ub9ac\ub429\ub2c8\ub2e4.
--- StarterGui \uc548\uc5d0 ScreenGui \ub97c \ub123\uace0 \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\ub85c \uc785\ub825\ud574\ubcf4\uc138\uc694\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nMount(ScreenGui,\n Frame {\n Name = \"Wow!\";\n }\n --[[\n , Frame {} , Frame {}\n \ub354\ub9ce\uc740 \uc624\ube0c\uc81d\ud2b8\ub97c \ub2e4\uac19\uc774 Mount \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n ]]\n)\n \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":"\uc624\ube0c\uc81d\ud2b8\uc5d0 \uc544\uc774\ub514 \ubd80\uc5ec\ud558\uae30, \uadf8\ub9ac\uace0 \uc0ac\uc6a9\ud558\uae30","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
\ubcc0\uc218\uc5d0 \ub9cc\ub4e4\uc5b4\uc9c4 \uc624\ube0c\uc81d\ud2b8\ub97c \ud558\ub098\ud558\ub098 \uc800\uc7a5\ud574??? \uadf8\uac8c \ud3b8\ud560\ub9ac\uac00 \uc5c6\uc8e0. \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc544\uc774\ub514\ub97c \ub123\uace0 \uc0ac\uc6a9\ud574\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}\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":"\ub610\ud55c, 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.
\uc8fc\uc758 : 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.
\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 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.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Mount\nlocal Mount = Quad.Store\nlocal Store = Quad.Class\n\nlocal Frame = Class \"Frame\"\n\n--\ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ubaa8\ub450 \uac00\uc9c4 \ud504\ub808\uc784\uc744 \uc0dd\uc131\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\nFrame \"a,b\" {\n Name = \"main\";\n Frame \"a\" {\n Name = \"Child1\";\n };\n Frame \"b\" {\n Name = \"Child2\";\n };\n}\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ub458\ub2e4 \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a,b\"):Each(function(item, index)\n print(item.Name)\nend)\nprint(\"----\")\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ub97c \ub3d9\uc2dc\uc5d0 \uac00\uc9c4 \uac83\uc744 \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a&b\"):Each(function(item, index)\n print(item.Name)\nend)\nprint(\"----\")\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a\uc640b \ub97c \ub3d9\uc2dc\uc5d0 \uac00\uc9c4\uac83\uacfc, b \ub97c \uac00\uc9c4\uac83\uc744 \uc120\ud0dd\n-- \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a&b,b\"):Each(function(item, index)\n print(item.Name)\nend)\n \ub610\ub294(or) \uc5f0\uc0b0 , \uadf8\ub9ac\uace0(and) \uc5f0\uc0b0 & GetObjects \uc5d0\ub294 \uc774 \ub450 \uc5f0\uc0b0\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uace0, \uc0dd\uc131\uc2dc\uc5d0\ub294 , \uc73c\ub85c \uc5ec\ub7ec \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub744\uc5b4\uc4f0\uae30\ub294 \ubb34\uc2dc\ub429\ub2c8\ub2e4
\uc8fc\uc758 : \uace0\uae09 ID \uc0ac\uc6a9\uc2dc objectList:Remove \uba54\uc18c\ub4dc\ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/3_getObject/#id_1","title":"id \ucd94\uac00\uc640 \uc81c\uac70","text":"
\uacbd\uc6b0\uc5d0 \ub530\ub77c \uc774\ubbf8 \uc0dd\uc131\ud55c \uc624\ube0c\uc81d\ud2b8\uc5d0 id \ub97c \ucd94\uac00 \ud639\uc740 \uc81c\uac70\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Store = Quad.Store\n\nlocal Frame = Class \"Frame\"\n\nFrame \"testing\" {}\n\n-- \uc544\uc774\ub514\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4\nStore.AddObject(\n \"a,b\", Store.GetObject(\"testing\")\n)\n\n-- \uc544\uc774\ub514\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4\nStore.GetObjects(\"a\"):Remove(Store.GetObject(\"testing\"))\n Store.AddObject(ids:string, item:any) \ub97c \uc774\uc6a9\ud574 item \uc5d0 \uc544\uc774\ub514\ub97c \ucd94\uac00\ud558\uace0 :Remove(item:any) \ub97c \uc774\uc6a9\ud574 item \uc5d0 \uc544\uc774\ub514\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4
"},{"location":"tutorial/4_style/","title":"\ubc18\ubcf5\ub418\ub294 \uc18d\uc131\uac12\uc744 \uc904\uc774\uae30","text":"
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\n\n-- \uc0c8\ub85c\uc6b4 \uc2a4\ud0c0\uc77c\uc744 \ud558\ub098 \ub9cc\ub4ed\ub2c8\ub2e4\nlocal myStyle = Style {\n Size = UDim2.fromOffset(20,20);\n BackgroundColor3 = Color3.fromRGB(255,255,0);\n BackgroundTransparency = 0.5;\n}\n\nFrame \"mainFrame\" {\n Size = UDim2.fromScale(1,1);\n Frame \"Child\" {\n myStyle; -- \uc2a4\ud0c0\uc77c\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4!\n };\n Frame \"Child\" {\n Position = UDim2.fromOffset(30,0);\n myStyle;\n };\n Frame \"Child\" {\n Position = UDim2.fromOffset(60,0);\n myStyle;\n };\n Frame \"Child\" {\n Position = UDim2.fromOffset(90,0);\n -- \uc2a4\ud0c0\uc77c\uc740 \ub36e\uc5b4\uc368 \uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n BackgroundColor3 = Color3.fromRGB(255,0,0);\n myStyle;\n };\n}\n\nMount(ScreenGUI,Store.GetObject(\"mainFrame\"))\n Style\uc744 \uc0ac\uc6a9\ud558\uba74 \ub9ce\uc740 \uc591\uc758 \uc18d\uc131\uc744 \ud558\ub098\uc5d0 \ubcc0\uc218\ub85c \uc9d1\uc5b4\ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Style\uc744 \uc0ac\uc6a9\ud574\uc11c \ub9ce\uc740 \uc591\uc758 \ucf54\ub4dc\ub97c \uc904\uc5ec\ubcf4\uc138\uc694
\ub610, Style\uc5d0\ub294 \ud0c0\uac9f id\ub97c \uc9c0\uc815\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\n\n-- \uc5ec\uae30\uc5d0\ub294 & \ub098 , \uac00 \uc801\uc6a9\ub418\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4!\nStyle \"Child\" {\n Size = UDim2.fromOffset(20,20);\n BackgroundColor3 = Color3.fromRGB(255,255,0);\n BackgroundTransparency = 0.5;\n}\n\n-- \ub2e8, Style\uc740 \uba3c\uc800 \uc120\uc5b8\ud574\uc57c\ud569\ub2c8\ub2e4, Frame\uc744 \uba3c\uc800 \ub9cc\ub4e4\uace0\n-- Style\uc744 \uc120\uc5b8\ud558\uba74 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\nFrame \"mainFrame\" {\n Size = UDim2.fromScale(1,1);\n Frame \"Child\" {};\n Frame \"Child\" { Position = UDim2.fromOffset(30,0) };\n}\n\nMount(ScreenGUI,Store.GetObject(\"mainFrame\"))\n Style(id:string){ any }\ub97c \uc774\uc6a9\ud574 \uc2a4\ud0c0\uc77c\uc744 \uc120\uc5b8\ud574\uc8fc\uba74 \ub098\uc911\uc5d0 \ud574\ub2f9 id\ub97c \uac00\uc9c4 \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc \ud574\ub2f9 \uc2a4\ud0c0\uc77c\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4.
"},{"location":"tutorial/5_event/","title":"\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 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 \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\nFrame {\n [Event \"MouseEnter\"] = function (self)\n print(self.Name .. \"\uc5d0 \ub9c8\uc6b0\uc2a4\uac00 \uc62c\ub77c\uc654\uc2b5\ub2c8\ub2e4\")\n end;\n}\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.
\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.
-- \uc6a9\ubc95\nFrame {\n [Event.Created] = function (self)\n print(self.Name .. \"\uc774 \uc0dd\uc131\ub418\uc5c8\uc5b4\uc694\")\n end;\n}\n 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.
\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.
-- \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 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":"\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.
\ud2b8\uc708\uc740 \uc77c\ubc18\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc774 \uc218\ud589\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\"\nFrame \"mainFrame\" {\n Frame \"Child\" {\n Position = UDim2.fromOffset(0,0);\n Size = UDim2.fromOffset(20,20)\n };\n}\n\nMount(ScreenGUI, Store.GetObejct(\"mainFrame\"))\n\nlocal Child = Store.GetObject()\n \ud2b8\uc708 \uc635\uc158\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 EasingFunction \uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4
\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
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
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
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
Quad
\uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
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.
Sin
\uc0ac\uc778 \ud30c\ud615\uc744 \uc0ac\uc6a9\ud55c \ud568\uc218\uc785\ub2c8\ub2e4.
Circle
\uc6d0\ud615 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
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\uae40\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":"tutorial/7_quadProperty/","title":"Quad \ub0b4\ubd80 \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":"\ub808\uc9c0\uc2a4\ud130","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
\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 \uc0ac\uc6a9\uc774 \uac00\ub2a5\ud569\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 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\"\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\nMount(ScreenGUI, Store.GetObject(\"mainLabel\"))\n\nlocal Count = 0\nwhile true do\n task.wait(1)\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 \ub808\uc9c0\uc2a4\ud130\uc5d0\ub294 \uc5ec\ub7ec\uac00\uc9c0 \uba54\uc18c\ub4dc\uac00 \ub2f4\uaca8\uc788\uc2b5\ub2c8\ub2e4. \uc774 \uba54\uc18c\ub4dc\ub97c \uc0ac\uc6a9\ud558\uba74 \ub808\uc9c0\uc2a4\ud130\ub97c \ubcf4\ub2e4 \ub354 \ub2e4\uc591\ud558\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
register \ud2b9\uc218 \uba54\uc18c\ub4dc\uac00 \uc801\uc6a9\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
:Add(value:any)->register
\uac12\uc5d0 \ub354\ud558\uae30\ub97c \ucde8\ud569\ub2c8\ub2e4. \uc74c\uc218\ud615\ud0dc\uac00 \uc81c\uacf5\ub418\ub294 \uacbd\uc6b0 \ube7c\uae30 \ucc98\ub7fc \uc791\ub3d9\ud569\ub2c8\ub2e4. number, Udim, UDim2, Color3, Vector2 \ub4f1 \ub354\ud560 \uc218 \uc788\ub294 \ubaa8\ub4e0\uac83\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 \uc8fc\uc758 : \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.pos = UDim2.fromOffset(100,0)\n\nFrame \"mainFrame\" {\n Position = myStore \"pos\":Add(UDim2.fromOffset(0,100));\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile true do\n myStore.pos = myStore.pos + UDim2.fromOffset(10,0)\n task.wait(2)\nend\n :With((store:valueStore, newValue:any, key:string)->())->register
\ud568\uc218 \ub610\ub294 \ud14c\uc774\ube14\uc5d0\uc11c \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4. Add \ubcf4\ub2e4 \ub098\uc911\uc5d0 \uc218\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4 \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
\ud568\uc218\ud14c\uc774\ube14\uc5ec\ub7ec \uac12\uc774 \ubb36\uc784
-- \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.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 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 -- \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\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\n %(#colors)\n\n\nFrame \"mainFrame\" {\n BackgroundColor3 = \n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile true do\n\n task.wait(1)\nend\n -- \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 :Tween(options:TweenOptions)
\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. \uc8fc\uc758 : \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\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)\nend\n :Default(value:any)
\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. \uc8fc\uc758 : \ucc98\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \ub54c\uc5d0\ub9cc \uc774 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\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 :Register((store:valueStore, newValue:any, key:string)->())->nil
\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
-- \uc6a9\ubc95\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\n\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.test1 = 1\nmyStore.test2 = \"Hello\"\n\nmyStore \"test1,test2\":Register(function()\n print(myStore.test1,myStore.test2)\nend)\n\nmyStore.test1 = 2\n"},{"location":"tutorial/9_lang/","title":"\uc5b8\uc5b4\uad00\ub9ac","text":"
Quad \uc5d0\ub294 \uadc0\ucc2e\uc740 \uc5b8\uc5b4\uad00\ub9ac\ub97c \uc790\ub3d9\uc73c\ub85c \ud574\uc8fc\ub294 \ubaa8\ub4c8\uc774 \ub0b4\uc7a5\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c, register \uc640 \uc5f0\ub3d9\ud574 \ubcc0\ud558\ub294 \ud14d\uc2a4\ud2b8\ub3c4 \uc54c\uc544\uc11c \uc5b8\uc5b4\uc5d0 \ub9de\uac8c \ucd9c\ub825\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
"}]}
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":[" "]},"docs":[{"location":"","title":"Quad","text":"
\ucc98\uc74c\uc624\uc168\ub098\uc694? \ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c\ub97c \uc77d\uc5b4\ubcf4\uc138\uc694! \ucc98\uc74c\ubd80\ud130 \ucc28\uadfc\ucc28\uadfc Quad \ubaa8\ub4c8\uc744 \uc815\ubcf5\ud560 \uc218 \uc788\uc5b4\uc694
"},{"location":"#_1","title":"\ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c \ubaa9\ucc28","text":""},{"location":"#api","title":"API \ub808\ud37c\ub7f0\uc2a4","text":"
class __call, import class extend private ~~make~~
event __call prop created createdSync disconnecter private ~~bind~~
mount __call mount => mountClass|mountsClass class mountClass|mountsClass
store getObject getObjects => objectList addObject class objectList class store
style private ~~parseStyles~~ __call new
tween (from @qwreey75:AdvancedTween)
"},{"location":"#_2","title":"\uc9c4\ud589\uc911\uc774\uac70\ub098 \uac80\ud1a0\uc911","text":""},{"location":"#spring","title":"Spring","text":"
Spring \ubb3c\ub9ac \uacc4\uc0b0\uc744 UI \uc560\ub2c8\uba54\uc774\uc158\uc5d0 \uc801\uc6a9\ud569\ub2c8\ub2e4 WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#quad-debuger","title":"Quad Debuger","text":"
Register \uc758 \uc0c1\ud0dc\uc640 Store \uc758 \uac12, Class \uc758 \ub3d9\uc791 \uc5ec\ubd80 \ub4f1 Quad \uc758 \uc5ec\ub7ec \uc790\uc6d0\uc744 \uae34\ubc00\ud558\uac8c \ub514\ubc84\uadf8\ud569\ub2c8\ub2e4. WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#selection","title":"Selection","text":"
Tab \ud0a4\ub4f1\uc73c\ub85c \ubc84\ud2bc \uc120\ud0dd\ud558\uae30 (... \uac00\ub2a5\ud568?) WIP. \uac80\ud1a0\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#quad-component-studio","title":"Quad Component Studio","text":"
\ub208\uc5d0 \ubcf4\uc774\ub294 \uc6cc\uc9c0\uc6cc\uadf8\uc2dd \ud3b8\uc9d1\uae30\ub97c \uc774\uc6a9\ud574 Quad Class \ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"#quad-webrender","title":"Quad WebRender","text":"
HTML, CSS, JS \ub85c\uc368 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ubcc0\ud615\ud574 \uc2a4\ud29c\ub514\uc624 \uc5c6\uc774 \uac1c\ubc1c\ud558\ub294 \uac00\ubcbc\uc6b4 \uac1c\ubc1c\ubc95\uc785\ub2c8\ub2e4. WIP. \uac80\ud1a0\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.
"},{"location":"changelogs/","title":"\ubc84\uc804 \ubc88\uacbd\uc0ac\ud56d","text":""},{"location":"changelogs/#222","title":"2.22","text":"
\ub354\uc774\uc0c1 Event.Prop \uac00 \ucc98\uc74c \uc0dd\uc131\uc2dc \uc2e4\ud589\ub418\ub294 \uc77c\uc774 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#221","title":"2.21","text":"
Linker \uac00 \uc774\uc81c \ud074\ub798\uc2a4 \uc548 \ud074\ub798\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ub420 \uc218 \uc788\ub3c4\ub85d \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#220","title":"2.20","text":"
Docments \uac00 \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub9ce\uc740\uc591\uc758 \uc0c8\ub85c\uc6b4 \ud29c\ud1a0\ub9ac\uc5bc\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4. Mkdocs \ud14c\ub9c8\uc640 \uc5ec\ub7ec\uac00\uc9c0 \uc124\uc815\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c Makefile \uc744 \ud1b5\ud574\uc11c rojo build \uc640 mkdocs build \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#219","title":"2.19","text":"
Linker \uac1d\uccb4\uac00 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c GetPropertyChangedSignal \uc640, self \uc5d0 \ud2b9\uc815 \uc624\ube0c\uc81d\ud2b8 \ud639\uc740 \uc774\ubca4\ud2b8\ub97c \uc5f0\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#218","title":"2.18","text":"
\uc774\uc81c \ub354\uc774\uc0c1 GC \uc5d0 \uc758\ud574 Store \uc758 Instance \uac12\uc774 \uc190\uc2e4\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#217","title":"2.17","text":"
Tween \uc758 CallBack \ub4f1\ub85d \uc2dc \uc8fc\uc5b8\uc9c0\ub294 \ud30c\ub77c\uba54\ud130\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ub354\uc774\uc0c1 ~ \ubb38\uc774 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#215-breaking-changes","title":"2.15 BREAKING CHANGES","text":"
\uc774\uc81c Lang \uc5d0\uc11c CurrentLocale, FailedMessage \uc744 \ubcc0\uacbd\ud558\uba74 \uc790\ub3d9\uc73c\ub85c \ubcc0\uacbd\uc0ac\ud56d\uc774 \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4. \ub610\ud55c \uc77c\ubd80 \ud544\ub4dc\uc758 \ub124\uc774\ubc0d\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#214","title":"2.14","text":"
Lang \ubaa8\ub4c8\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. register \ub97c \uc0ac\uc6a9\ud574 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ub2e4\uc911\uc5b8\uc5b4 \uc9c0\uc6d0\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#213","title":"2.13","text":"
Signal \ubaa8\ub4c8\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c Class.Extend \uc5d0\uc11c GetPropertyChangedSignal \uacfc EmitPropertyChangedSignal \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#212","title":"2.12","text":"
Mount \ubc18\ud658 \uac1d\uccb4\uc5d0 Add \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d Mount \uac1d\uccb4\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#211","title":"2.11","text":"
Store.GetObjects \uc5d0 \uc774\uc81c & \ubb38\ubc95\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#29","title":"2.9","text":"
PreloadAsync \ub97c \ud1b5\ud574 \uc774\uc81c round.lua \uc5d0\uc11c \ub77c\uc6b4\ub4dc \uc774\ubbf8\uc9c0\ub97c \ubbf8\ub9ac \ub85c\ub4dc\ud569\ub2c8\ub2e4.
"},{"location":"changelogs/#28","title":"2.8","text":"
\ubc18\ud658 \uad00\ub828 \ucf54\ub4dc\uac00 exports \ub85c \uc774\uc8fc\ub418\uc5c8\uc73c\uba70. init.lua \uc5d0\uc11c\ub294 \uc790\ub3d9\uc801\uc73c\ub85c types \ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.
"},{"location":"changelogs/#27","title":"2.7","text":"
\uc774\uc81c types \ub97c \uc644\uc804\ud788 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc9c1\uc811 \ubd88\ub7ec\uc640 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"changelogs/#2126-breaking-changes","title":"2.1~2.6 BREAKING CHANGES","text":"
\ubaa8\ub4e0 \ubaa8\ub4c8\uc758 \ud544\ub4dc\uc758 \uc774\ub984\uc774 \ubcc0\uacbd\ub418\uc5c8\uc73c\uba70, \ubaa8\ub4e0 \ud074\ub798\uc2a4\ub4e4\uc774 \uae30\ubcf8\uc801\uc73c\ub85c \ub300\ubb38\uc790 \uc2dc\uc791 \ub124\uc774\ubc0d\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \uba85\uba85\uaddc\uce59\uc744 \ubcc0\uacbd\ud588\uc2b5\ub2c8\ub2e4.
"},{"location":"changelogs/#20","title":"2.0","text":"
\ubc84\uc804 \ud310\uc62c\ub9bc, BREAKING CHANGES \ub97c \uc704\ud574 \ubc84\uc804\uc744 \ud310\uc62c\ub9bc \ud558\uc600\uc2b5\ub2c8\ub2e4.
"},{"location":"license/","title":"\ub77c\uc774\uc120\uc2a4","text":"KoreanEnglish
qwreeykawaii license v1.3\nCopyright 2023. Qwreey [qwreey75@gmail.com]\n\n\uc774 \ub77c\uc774\uc120\uc2a4\ub294 DBAD \ub77c\uc774\uc120\uc2a4\ub97c \uae30\ubc18\uc73c\ub85c \ud569\ub2c8\ub2e4.\n\ub204\uad6c\ub4e0\uc9c0 \uc774 \ub77c\uc774\uc120\uc2a4 \ubb38\uc11c\uc758 \uc6d0\ubcf8 \ud639\uc740 \uc218\uc815\ubcf8\uc744\n\ubcf5\uc0ac, \ud3b8\uc9d1, \ubc30\ud3ec \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\nqwreeykawaii \ub77c\uc774\uc120\uc2a4\uc758 \ubcf5\uc0ac \ubc30\ud3ec \ubc0f \uc218\uc815\uc5d0\n\uad00\ud55c \uaddc\uc815\uacfc \uc870\uac74.\n\n1. \ub2f9\uc2e0\uc740 \uc774 \uadc0\uc5ec\uc6b4 \ucc3d\uc791\ubb3c\uc744 \uac00\uc9c0\uace0 \uc5b4\ub5a0\ud55c\n\uac83\uc774\ub4e0 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e8, \ubb34\ub840\ud558\uc9c0 \ub9c8\uc138\uc694.\n\ubb34\ub840\ud55c \ud589\ub3d9\uc740 \ud1b5\uc0c1\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\n\n\uac00. \uadc0\uc5ec\uc6b4 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc5b4\ub5a0\ud55c \uac00\uacf5\ub3c4 \uc5c6\uc774\n \ubcf5\uc81c\ud558\uac70\ub098, \uc774\ub984\ub9cc \ubc14\uafb8\ub294 \uac83\uc740 \ubb34\ub840\ud558\uba70\n \ub178\uace8\uc801\uc778 \uc800\uc791\uad8c \uce68\ud574\uc785\ub2c8\ub2e4.\n\ub098. \uadc0\uc5ec\uc6b4 \uc774 \ucc3d\uc791\ubb3c\uc5d0 \uc74c\ub780\uc131 \ud639\uc740 \uc720\ud574\ud55c\n \ucf58\ud150\uce20\ub97c \ud3ec\ud568\uc2dc\ud0a4\ub294 \uac83\uc740 \ubb34\ub840\ud569\ub2c8\ub2e4.\n \uadc0\uc5ec\uc6b4 \ucf58\ud150\uce20\ub85c \ub2e4\ub978\uc774\ub97c \ud574\uce58\uc9c0 \ub9c8\uc2ed\uc2dc\uc624.\n\n\uadf8\ub7ec\ub098 \uc774\uc5d0\ub9cc \uad6d\ud55c\ub418\ub294\uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4.\n\ubb34\uc5c7\ubcf4\ub2e4\ub3c4, \uadc0\uc5ec\uc6b4 \ud0c0\uc778\uc744 \uc0c1\ucc98\uc8fc\uc9c0 \ub9c8\uc138\uc694.\n\n2. \ub2f9\uc2e0\uc774 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc0ac\uc6a9\ud574 \ub9ce\uc740 \uc774\ub4dd\uc744 \ubcf8\n\uacbd\uc6b0, \uadc0\uc5ec\uc6b4 \ucc3d\uc791\uc790\uc5d0\uac8c \uc0ac\ub791\uc744 \ubc30\ud478\uc138\uc694.\n\uc778\uac04\uc801\uc778 \uc0ac\ub78c\uc740 \uadc0\uc5ec\uc6b4 \uc0ac\ub78c\ub4e4\uc744 \uc678\uba74\ud558\uc9c0\n\uc54a\uc2b5\ub2c8\ub2e4. \ub2f9\uc2e0\uc758 \ucee4\ud53c \ud55c\uc794\uc744 \ub098\ub220\uc8fc\uc138\uc694.\n\n3. \uc774 \ucc3d\uc791\ubb3c\uc740 \uc5b4\ub5a0\ud55c \ubcf4\uc99d \uc5c6\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.\n\uc774 \ucc3d\uc791\ubb3c\uc744 \uc0ac\uc6a9\ud558\ub2e4, \ucc3d\uc791\uc790\uc758 \uadc0\uc5ec\uc6b4\n\uc2e4\uc218\ub85c \uc778\ud574 \ubb34\uc5b8\uac00 \uc798\ubabb\ub418\uc5c8\ub2e4\uba74, \ubb38\uc81c\ub97c \uc9c1\uc811\n\ud574\uacb0\ud558\uc138\uc694. \ubb34\ub840\ud558\uc9c0 \uc54a\uc740 \uc0ac\ub78c\uc740 \uc801\uc5b4\ub3c4\n\uadc0\uc5ec\uc6b4 \ud0c0\uc778\ub4e4\uc744 \ube44\ub09c\ud558\uac70\ub098 \ubaa8\uc695\ud558\uc9c0\ub294 \uc54a\uc73c\uba70\n\uc218\uc815\ubcf8\uc744 \uc81c\ucd9c\ud558\uac70\ub098 \ubc84\uadf8\ub9ac\ud3ec\ud2b8\ub97c \uc81c\ucd9c \ud560\n\uac83\uc785\ub2c8\ub2e4.\n\n4. \ub2f9\uc2e0\uc774 \uc774 \uadc0\uc5ec\uc6b4 \ucc3d\uc791\ubb3c\uc744 \ud65c\uc6a9\ud574 \ub2e4\ub978 \ucc3d\uc791\ubb3c\n\uc744 \ub9cc\ub4e4\uace0 \uc2f6\uc740 \uacbd\uc6b0 \uc801\uc5b4\ub3c4 \uc0ac\uc6a9\ud588\ub2e4\ub294 \uace0\uc9c0\ub294\n\ub0a8\uaca8\uc8fc\uc138\uc694. \uadc0\uc5ec\uc6b4 \ucc3d\uc791\uc790\ub4e4\uc740 \uc790\uc2e0\uc758 \ucc3d\uc791\ubb3c\uc774\n\uc88b\uc740\uacf3\uc5d0 \uc0ac\uc6a9\ub418\uc5c8\uc74c\uc744 \uae30\ubed0\ud560 \uac83\uc785\ub2c8\ub2e4.\n* \uc774\ub294 \uad8c\uace0 \uc0ac\ud56d\uc785\ub2c8\ub2e4. \ud544\uc218\uac00 \uc544\ub2c8\uba70 \ubd88\uac00\ud53c\ud55c\n \uacbd\uc6b0 \ubb34\uc2dc\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n\n5. \ub7ec\uc2dc\uc544 \uad6d\uc801\uc758 \uc774\ub4e4\uc740 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc601\ub9ac \ubaa9\uc801\uc73c\ub85c\n\uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. - \uc6b0\ub9ac\ub294 \uc804\uc7c1\uc790\uae08\uc744\n\uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uac19\uc740 \uc774\uc720\ub85c\uc368, \uc804\uc7c1\uc774 \uc9c0\uc6d0\ub420 \uc218 \uc788\ub294 \uacf3\uc5d0\uc11c\uc758\n\uc774 \ucc3d\uc791\ubb3c \uc0ac\uc6a9\uc744 \ud5c8\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n qwreeykawaii license v1.3\n\nCopyright 2023. Qwreey [qwreey75@gmail.com]\n\nThis license is based on DBAD license.\nEveryone is permitted to copy and distribute\nverbatim or modified copies of this license\ndocument.\n\nTERMS, AND CONDITIONS FOR COPYING,\nDISTRIBUTION, AND MODIFICATION\n\n1. You can do anything with this original work,\nbut don't be rude\n\nIn general, being rude includes below\n\nFirst. Do not copy these cute works without\n any modification. changing the name\n only is outright copyright infringement\nSecond. Do not add some harmful or NSFW content.\n It's very rude and may harm others\n\nBeing rude is not limited to these instances.\nAbove all, don't hurt cute people\n\n2. If you get any benefit or profit from these cute\nworks, Share the love. A polite person may share\nthe love with cute people.\n3. These cute works are provided with no warranty.\nIf something goes wrong due to the creator's cute\nmistake, Fix it yourself. A polite person may\nsubmit the fix or bug report.\n4. If you create something with these works, Leave\nthe original creator's name in your work.\nthe cute creator will be happy if their works are\nused for good.\n* This is a recommendation. Not required.\n5. Russian nationality can not use this creation for\ncommercial purposes. \u2014 We do not support the war.\nSame reason, This creation cannot be used where\nit can support the war.\n"},{"location":"include/TweenOptions/","title":"TweenOptions","text":"
export type TweenOptions = {\nEasing: \"Linear\"\n|\"Quint\"\n|\"Quart\"\n|\"Cubic\"\n|\"Quad\"\n|\"Sin\"\n|\"Circle\"\n|\"Expo\"\n|\"Elastic\"\n|\"Bounce\"\n|\"Exp2\"\n|\"Exp4\"\n|EasingFunction?;\nDirection: \"Out\"|\"InOut\"|\"In\"|EasingDirection?;\nCallBack: {[number|\"*\"|string]:(Item:DOM|any,Alpha:number,AbsolutePercent:number)->()}?;\nOnStepped: TweenOnStepped?;\n// \uc77c\ubc18\uc801\uc73c\ub85c CallBack \uc5d0 ['*']=()->() \ub97c\n// \ub4f1\ub85d\ud558\ub294\uac83\uacfc \uac19\uc73c\ub098 \uc131\ub2a5\uc0c1\uc758 \uc774\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4\nEnded: TweenEnded?;\nGetter: TweenGetter?;\nSetter: TweenSetter?;\nTime: number?;\n}\n"},{"location":"include/direction/","title":"Direction","text":"
Out \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.
In \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.
InOut \uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.
"},{"location":"include/easings/","title":"Easings","text":"
\ubaa8\ub4e0 Easing \uc740 \uc5ec\uae30\uc5d0\uc11c \uc9c1\uc811\uc801\uc73c\ub85c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
Linear
\uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615 \ud568\uc218\uc785\ub2c8\ub2e4
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
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
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
Quad
\uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
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.
Sin
\uc0ac\uc778 \ud30c\ud615\uc744 \uc0ac\uc6a9\ud55c \ud568\uc218\uc785\ub2c8\ub2e4.
Circle
\uc6d0\ud615 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
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\uae40\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\nFrame {\n [Event \"MouseEnter\"] = function (self)\n print(self.Name .. \"\uc5d0 \ub9c8\uc6b0\uc2a4\uac00 \uc62c\ub77c\uc654\uc2b5\ub2c8\ub2e4\")\n end;\n}\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.
\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.
-- \uc6a9\ubc95\nFrame {\n [Event.Created] = function (self)\n print(self.Name .. \"\uc774 \uc0dd\uc131\ub418\uc5c8\uc5b4\uc694\")\n end;\n}\n 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.
\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.
-- \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 Event.Prop(propertyName:string)
\ud504\ub85c\ud37c\ud2f0 \uac12\uc774 \ubcc0\uacbd\ub428\uc744 \uc5f0\uacb0\ud569\ub2c8\ub2e4.
-- \uc6a9\ubc95\nTextBox {\n Text = \"\uc544\ubb34\uac70\ub098 \uc785\ub825\ud558\uc138\uc694\";\n [Event.Prop \"Text\"] = function (self,text)\n -- \ud3b8\uc758\uc0c1\uc758 \uc774\uc720\ub85c \ubcc0\uacbd\ub41c \uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4\n print(text)\n end;\n}\n"},{"location":"include/locales/","title":"Locales","text":"
Default (default) English (en_us) Spanish (es_es) French (fr_fr) Indonesian (id_id) Italian (it_it) Japanese (ja_jp) Korean (ko_kr) Russian (ru_ru) Thai (th_th) Turkish (tr_tr) Vietnamese (vi_vn) Portuguese (pt_br) German (de_de) ChineseSimplified (zh_cn) ChineseTraditional (zh_tw) Bulgarian (bg_bg) Bengali (bn_bd) Czech (cs_cz) Danish (da_dk) Greek (el_gr) Estonian (et_ee) Finnish (fi_fi) Hindi (hi_in) Croatian (hr_hr) Hungarian (hu_hu) Georgian (ka_ge) Kazakh (kk_kz) Khmer (km_kh) Lithuanian (lt_lt) Latvian (lv_lv) Malay (ms_my) Burmese (my_mm) Bokmal (nb_no) Dutch (nl_nl) Filipino (fil_ph) Polish (pl_pl) Romanian (ro_ro) Ukrainian (uk_ua) Sinhala (si_lk) Slovak (sk_sk) Slovenian (sl_sl) Albanian (sq_al) Bosnian (bs_ba) Serbian (sr_rs) Swedish (sv_se) Arabic (ar_001)
"},{"location":"include/mounts/","title":"Mounts","text":"
:Unmount()
\uc774\ub807\uac8c \ud558\uba74 \ub9c8\uc6b4\ud2b8\ub41c Instance \ub97c \uc9c0\uc6cc\ubc84\ub9bd\ub2c8\ub2e4. Quad \ub294 \uc548\uc804\ud55c \uba54\ubaa8\ub9ac \uad00\ub9ac\ub97c \uc704\ud574 gc \uc758 \uae30\ub2a5\uc5d0 \uc758\uc874\ud558\ubbc0\ub85c, gc \uc2dc\uac04\ucc28\ub85c \uc778\ud574 Store.GetObject \uc5d0\uc11c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0ac\ub77c\uc9c0\ub294\ub370 \uc2dc\uac04\uc774 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui,mainFrame)\n\nlocal childFrame = Frame {}\nlocal childFrameMount = Mount(mainFrame,childFrame)\nchildFrameMount:Unmount()\n-- childFrame \uc740 \ub2e8\uc21c\ud788 .Parent = nil \ub418\ub294 \uac83\uc744 \ub118\uc5b4 \uba54\ubaa8\ub9ac\uc5d0\uc11c \uc0ac\ub77c\uc9d1\ub2c8\ub2e4\n-- \uc989, Destroy() \uac00 \ud638\ucd9c\ub429\ub2c8\ub2e4\n :Add(item:any)
Mount \uc5d0 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ucc98\uc74c \uc124\uc815\ud55c to \uac12\uc744 \ub530\ub77c \ubd80\ubaa8\uac00 \uacb0\uc815\ub429\ub2c8\ub2e4.
\uc774 \ub3d9\uc791\uc740 \ub9ac\uc2a4\ud2b8\ub97c \ub9cc\ub4e4 \ub54c \uc720\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc\ub85c\ub4dc \ub3d9\uc791\uc2dc \uc9c1\uc811 \uc81c\uac70\uac00 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui, mainFrame)\n\nlocal lastListMount = Mount(mainFrame)\nlocal function refreshList()\n lastListMount:Unmount() -- \uc774\uc804 children \uc744 \uc54c\uc544\uc11c \uc81c\uac70\ud569\ub2c8\ub2e4\n for i = 1,10 do\n lastListMount:Add(Frame { Name = tostring(i) })\n end\nend\n\ntask.spawn(function()\n while true do\n refreshList()\n task.wait(2)\n end\nend)\n \ub2e4\uc74c\uacfc \uac19\uc774 \uc774\uc804 children \uc744 \uac04\uc811\uc801\uc73c\ub85c \uc81c\uac70\ud558\uace0 \uc0c8\ub85c\uc6b4 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e8 ScrollFrame \uc758 \uacbd\uc6b0 CanvasPosition\uc774 \ucd08\uae30\ud654 \ub418\uc5b4\ubc84\ub9ac\ubbc0\ub85c \uc790\uc2dd\ub4e4\uc744 :Unmount() \ud558\uae30 \uc804\uc5d0 \uc704\uce58\ub97c \uc800\uc7a5\ud558\uace0 \ub2e4\uc2dc \ubd88\ub7ec\uc640\uc57c \ud569\ub2c8\ub2e4
"},{"location":"include/objectList/","title":"objectList","text":"
:Each((item:any, index:number)->())
\uc77c\ubc18\uc801\uc778 \ubc18\ubcf5\uc785\ub2c8\ub2e4. for \ub97c \uc0ac\uc6a9\ud558\ub294\uac83\uacfc \ud6a8\uacfc\uac00 \uac19\uc73c\ub098 \ud568\uc218\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4
:EachAsync((item:any, index:number)->())
\ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uace0 \ubc14\ub85c\ubc14\ub85c \ub2e4\uc74c \uc544\uc774\ud15c\uc73c\ub85c \ub118\uc5b4\uac11\ub2c8\ub2e4. \ucf54\ub8e8\ud2f4\uc774 \uc774\uc6a9\ub429\ub2c8\ub2e4. wrap() \ucf54\ub8e8\ud2f4\uc744 \ubaa8\ub974\uac70\ub098, \ud544\uc694\uc131\uc774 \uc5c6\ub294\uacbd\uc6b0 \uc77c\ubc18\uc801\uc73c\ub85c :Each \ub97c \uc0ac\uc6a9\ud574\ub3c4 \ub429\ub2c8\ub2e4
:IsEmpty()
\uc774 ObjectList \uac00 \ube44\uc5b4\uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.
:Remove(indexOrItem:number|any)
objectList \uc5d0\uc11c \ud574\ub2f9\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4. , & \ub97c \uc0ac\uc6a9\ud55c \uace0\uae09 \uac80\uc0c9\uc5d0\uc11c\ub294 \uc791\ub3d9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4
"},{"location":"include/quadProperty/","title":"quadProperty","text":"
RoundSize:number?
ImageLabel, ImageButton \uc5d0\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc18d\uc131\uc785\ub2c8\ub2e4. \uc6d0\ud615 \uc774\ubbf8\uc9c0\uc5d0 Slice\ub97c \uc774\uc6a9\ud574 \ub465\uadfc \ud504\ub808\uc784\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c UICorner\ubcf4\ub2e4 \ubd80\ub4dc\ub7ec\uc6b4 \ucf54\ub108\ud6a8\uacfc\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.
Corner:number?
\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 UI\uc624\ube0c\uc81d\ud2b8\uc5d0 \uc801\uc6a9\ub429\ub2c8\ub2e4. UICorner\ub97c \uc774\uc6a9\ud574 \ubaa8\uc11c\ub9ac \ubd80\ubd84\uc744 \ub465\uae00\uac8c \ub9cc\ub4ed\ub2c8\ub2e4. \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
PaddingAll:UDim?
UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. \uc0c1\ud558\uc88c\uc6b0 \ubaa8\ub450 \uac19\uc740 \uac12\uc73c\ub85c \uc801\uc6a9\ub429\ub2c8\ub2e4. PaddingAllOffset \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
PaddingAllOffset:number?
UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. PaddingAll\uacfc \uac19\uc740 \ubc29\ubc95\uc73c\ub85c \uc791\ub3d9\ud558\ub098, Offset\uac12\ub9cc \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. PaddingAll \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
Scale:number?
UIScale\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. UIScale.Scale \uacfc \uac19\uc740 \ud6a8\uacfc\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4
"},{"location":"include/register/","title":"Register","text":"
register \ud2b9\uc218 \uba54\uc18c\ub4dc\uac00 \uc801\uc6a9\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
:Add(value:any)->register
\uac12\uc5d0 \ub354\ud558\uae30\ub97c \ucde8\ud569\ub2c8\ub2e4. \uc74c\uc218\ud615\ud0dc\uac00 \uc81c\uacf5\ub418\ub294 \uacbd\uc6b0 \ube7c\uae30 \ucc98\ub7fc \uc791\ub3d9\ud569\ub2c8\ub2e4. number, Udim, UDim2, Color3, Vector2 \ub4f1 \ub354\ud560 \uc218 \uc788\ub294 \ubaa8\ub4e0\uac83\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 \uc8fc\uc758 : \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.pos = UDim2.fromOffset(100,0)\n\nFrame \"mainFrame\" {\n Position = myStore \"pos\":Add(UDim2.fromOffset(0,100));\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile true do\n myStore.pos = myStore.pos + UDim2.fromOffset(10,0)\n task.wait(2)\nend\n :With((store:valueStore, newValue:any, key:string)->())->register
\ud568\uc218 \ub610\ub294 \ud14c\uc774\ube14\uc5d0\uc11c \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4. Add \ubcf4\ub2e4 \ub098\uc911\uc5d0 \uc218\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4 \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
\ud568\uc218\ud14c\uc774\ube14
-- \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.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 -- \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\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 BackgroundColor3 = myStore \"color\":With(colors);\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile task.wait(1) do\n myStore.color = (i-1)%(#colors)+2\nend\n :Tween(options:TweenOptions)
\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. \uc8fc\uc758 : \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\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)\nend\n :Default(value:any)
\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. \uc8fc\uc758 : \ucc98\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \ub54c\uc5d0\ub9cc \uc774 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\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 :Register((store:valueStore, newValue:any, key:string)->())->nil
\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
-- \uc6a9\ubc95\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\n\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.test1 = 1\nmyStore.test2 = \"Hello\"\n\nmyStore \"test1,test2\":Register(function()\n print(myStore.test1,myStore.test2)\nend)\n\nmyStore.test1 = 2\n"},{"location":"tutorial/","title":"Getting Started","text":""},{"location":"tutorial/#_1","title":"\uba38\ub9ac\ub9d0","text":"
\uc774 \ud398\uc774\uc9c0\ub294 Quad \ubaa8\ub4c8\uc744 \uc27d\uac8c \uc2dc\uc791\ud560 \uc218 \uc788\ub3c4\ub85d \ud29c\ud1a0\ub9ac\uc5bc\uc744 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud398\uc774\uc9c0\ub97c \uc815\ub3c5\ud574 Quad \ubaa8\ub4c8\uc758 \uc804\ubc18\uc801\uc778 \uc0ac\uc6a9\ubc95\uc744 \ud30c\uc545\ud574\ubcf4\uc138\uc694!
\uc8fc\uc758: \uc774 \ubaa8\ub4c8\uc740 \uac1c\ubc1c \uc9c4\ud589\uc774 \ub9e4\uc6b0 \ube60\ub985\ub2c8\ub2e4. \ub9ce\uc740\uc591\uc758 \ubcc0\uacbd \uc0ac\ud56d\uc774 \uc788\uc744 \uc218 \uc788\uc73c\ubbc0\ub85c github \uc5d0\uc11c \ubcc0\uacbd\uc0ac\ud56d\uc744 \uacc4\uc18d\ud574\uc11c \ucd94\uc801\ud558\uc138\uc694
\ubcc0\uacbd \uc0ac\ud56d\uc740 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/#_2","title":"\uc124\uce58","text":""},{"location":"tutorial/#_3","title":"\ubaa8\ub4c8 \ubd88\ub7ec\uc624\uae30/\ucd08\uae30\ud654","text":"
local Quad = require(path.to.module).Init()\n \ubaa8\ub4c8\uc744 \uc14b\uc5c5\ud558\uae30 \uc704\ud574\uc11c\ub294 .Init(QuadId:string?) \uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c QuadId \uac12\uc740 \ud544\uc694\ud558\uc9c0 \uc54a\uc9c0\ub9cc, \ub098\uc911\uc5d0 \uc18c\uac1c\ud560 Store \uc640 \uac19\uc740 \uc77c\ubd80 \uae30\ub2a5\ub4e4\uc774 QuadId:string \uc5d0 \uc601\ud5a5\ubc1b\uae30\ub3c4 \ud569\ub2c8\ub2e4.
.Init(QuadId:string) \ud568\uc218\ub294 QuadId \uac00 \uac19\uc740 \ubd88\ub7ec\uc624\uae30\uac00 \uc774\ubbf8 \uc788\uc5c8\ub358 \uacbd\uc6b0, \ucd08\uae30\ud654 \ud558\uc9c0 \uc54a\uace0 \ubd88\ub7ec\uc654\ub358\uac83\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \ubaa8\ub4c8\ub4e4 \ub07c\ub9ac QuadId \uac00 \uac19\uc740 \uacbd\uc6b0 Store \uc640 \uac19\uc740\uac83\uc774 \uacf5\uc720\ub429\ub2c8\ub2e4.
QuadId \uac00 \ube44\uc6cc\uc9c4 \uacbd\uc6b0 \ud55c\ubc88\ub3c4 \uc0dd\uc131\ub41c \uc801 \uc5c6\ub294 \uc0c8\ub85c\uc6b4 Quad \uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4
local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n \ubd88\ub7ec\uc624\uae30\uac00 \ub05d\ub0ac\ub2e4\uba74 \uc774\uc81c Quad \uc758 \uc790\uc6d0\ub4e4\uc744 \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4! \ub2e4\uc74c \ud398\uc774\uc9c0\ub85c \ub118\uc5b4\uac00 \uc5b4\uc11c \ud65c\uc6a9\ud574 \ubd05\uc2dc\ub2e4
"},{"location":"tutorial/#_4","title":"\ud0c0\uc785 \ubd88\ub7ec\uc624\uae30","text":"
\uae30\ubcf8\uc801\uc73c\ub85c \uc774 \ubaa8\ub4c8\uc740 \ub85c\ub4dc\uc2dc \ud0c0\uc785\uc744 \ubc18\ud658\ud558\uc9c0\ub9cc. \uc9c1\uc811\uc801\uc73c\ub85c \ud0c0\uc785\uc744 \uc9c0\uc815\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 types.lua \ub97c \ubd88\ub7ec\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4
local types\n"},{"location":"tutorial/#_5","title":"\ud14c\uc2a4\ud2b8 \ud658\uacbd \uc900\ube44","text":"
\ud14c\uc2a4\ud2b8 \ud658\uacbd\uc740 rojo \uc640\uc758 \uac1c\ubc1c\ud1b5\ud569\uc744 \uc704\ud574 Play \ubc84\ud2bc\uc744 \ub204\ub974\uc9c0 \uc54a\uace0 \ubbf8\ub9ac\ubcf4\uae30\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4e4\uc5b4\uc90d\ub2c8\ub2e4 \uc774\ub97c \ud1b5\ud574 \ub2e4\ub978 \ucf54\ub4dc \ubc29\uc2dd\uc758 UI \ud504\ub808\uc784 \uc6cc\ud06c\ubcf4\ub2e4 \ube60\ub978 \uac1c\ubc1c\uc18d\ub3c4\ub97c \ub2ec\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/#_6","title":"\uc790\ub3d9 \ub9ac\ub85c\ub4dc","text":"
\uc8fc\uc758: rojo \ud658\uacbd\uc774 \uc544\ub2c8\ub77c\uba74 \uc790\ub3d9 \ub9ac\ub85c\ub4dc\ub294 \ub799\uc744 \ub3d9\ubc18\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
\uc77c\ubc18\uc801\uc73c\ub85c, \ub85c\uceec \ud3b8\uc9d1 \ud658\uacbd\uc5d0\uc11c \ub85c\ube14\ub85d\uc2a4\uc758 script editor \ub294 \ud55c\uae00\uc790 \ud55c\uae00\uc790 \ubcc0\uacbd\uc2dc \ub9c8\ub2e4 .Source \ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4. \uc774\ub294 \uacf3 \ud55c\uae00\uc790 \ud55c\uae00\uc790 \ud0c0\uc774\ud551 \uc2dc \ub9c8\ub2e4 UI \uac00 \uc5c5\ub370\uc774\ud2b8 \ub420 \uc218 \uc788\uc74c\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. Quad \uc758 tracker \ubaa8\ub4c8\uc740 \uc21c\uac04\uc801\uc73c\ub85c \ub9ce\uc740\uc591\uc758 \ub9ac\ub85c\ub4dc\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\ub3c4\ub85d \uc801\uc808\ud55c \ucfe8\ud0c0\uc784\uacfc \uc2dc\uac04\ubd84\ubc30\ub97c \uac00\uc9c0\uace0 \uc788\uc9c0\ub9cc, \uc774 \uacbd\uc6b0\uc5d0\ub3c4 Ctrl+S \ub97c \ub20c\ub7ec \uc800\uc7a5\ud574\uc57c \uc801\uc6a9\ub418\ub294 vscode \uc640 \uac19\uc740 \ud0c0 \ud3b8\uc9d1\uae30\uc640\ub294 \ucc28\uc774\uac00 \ub0a0 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc\uac00 \ucee4\uc9d0\uc73c\ub85c \uc778\ud574 \uc790\ub3d9 \ub9ac\ub85c\ub4dc\uc5d0\uc11c \ud37c\ud3ec\uba3c\uc2a4\uc801 \uc774\uc288\ub97c \uacaa\ub294\ub2e4\uba74, rojo \ub97c \ud65c\uc6a9\ud574 \ucf54\ub4dc\ub97c \uc678\ubd80\ub85c \uc62e\uae34 \ud6c4, vscode \ub97c \uc2a4\ud29c\ub514\uc624 \uc704\uc5d0 \ub193\uace0 \ubbf8\ub9ac\ubcf4\uae30\uc640 \ucf54\ub4dc\ub97c \ub3d9\uc2dc\uc5d0 \ubcf4\uba74\uc11c \ud3b8\uc9d1\ud558\uc138\uc694.
"},{"location":"tutorial/#_7","title":"\uc218\ub3d9 \ub9ac\ub85c\ub4dc","text":""},{"location":"tutorial/10_signal/","title":"Signal","text":"
Quad \uc5d0\ub294 \ud3b8\uc758\uc0c1\uc758 \uc774\uc720\ub85c
"},{"location":"tutorial/1_import/","title":"\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
\ubd88\ub7ec\uc628 Class \uc5d0 \uae30\ubcf8\uac12\uc744 \uc124\uc815\ud560 \uc218\ub3c4 \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 {}\nprint(frame1.FrameWithBorder)\nprint(frame2.FrameWithBorder)\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":"\ud654\uba74\uc5d0 UI \ub97c \ud45c\uc2dc\ud558\uae30","text":"
\uc77c\ubc18\uc801\uc73c\ub85c Quad \ubaa8\ub4c8\uc5d0\uc11c \ubaa8\ub4e0 Parent \ucc98\ub9ac\ub294 Mount \ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4. Mount(to:any,...item:any?)->mounts \ud568\uc218\ub97c \uc774\uc6a9\ud558\uba74 \ub2e4\ub8e8\ub294 \uc624\ube0c\uc81d\ud2b8\uac00 \ub85c\ube14\ub85d\uc2a4 Instance \uc778\uc9c0, \ud5a5\ud6c4 \uc18c\uac1c\ub420 Quad \ud655\uc7a5 \ud074\ub798\uc2a4\uc778\uc9c0 \uc0c1\uad00\uc5c6\uc774 \uc54c\uc544\uc11c Parent \uac00 \ucc98\ub9ac\ub429\ub2c8\ub2e4.
--- StarterGui \uc548\uc5d0 ScreenGui \ub97c \ub123\uace0 \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\ub85c \uc785\ub825\ud574\ubcf4\uc138\uc694\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nMount(ScreenGui,\n Frame {\n Name = \"Wow!\";\n }\n --[[\n , Frame {} , Frame {}\n \ub354\ub9ce\uc740 \uc624\ube0c\uc81d\ud2b8\ub97c \ub2e4\uac19\uc774 Mount \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n ]]\n)\n \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":"\uc624\ube0c\uc81d\ud2b8\uc5d0 \uc544\uc774\ub514 \ubd80\uc5ec\ud558\uae30, \uadf8\ub9ac\uace0 \uc0ac\uc6a9\ud558\uae30","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
\ubcc0\uc218\uc5d0 \ub9cc\ub4e4\uc5b4\uc9c4 \uc624\ube0c\uc81d\ud2b8\ub97c \ud558\ub098\ud558\ub098 \uc800\uc7a5\ud574??? \uadf8\uac8c \ud3b8\ud560\ub9ac\uac00 \uc5c6\uc8e0. \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc544\uc774\ub514\ub97c \ub123\uace0 \uc0ac\uc6a9\ud574\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}\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":"
\ub610\ud55c, 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.
\uc8fc\uc758 : 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.
\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 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.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Mount\nlocal Mount = Quad.Store\nlocal Store = Quad.Class\n\nlocal Frame = Class \"Frame\"\n\n--\ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ubaa8\ub450 \uac00\uc9c4 \ud504\ub808\uc784\uc744 \uc0dd\uc131\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\nFrame \"a,b\" {\n Name = \"main\";\n Frame \"a\" {\n Name = \"Child1\";\n };\n Frame \"b\" {\n Name = \"Child2\";\n };\n}\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ub458\ub2e4 \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a,b\"):Each(function(item, index)\n print(item.Name)\nend)\nprint(\"----\")\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ub97c \ub3d9\uc2dc\uc5d0 \uac00\uc9c4 \uac83\uc744 \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a&b\"):Each(function(item, index)\n print(item.Name)\nend)\nprint(\"----\")\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a\uc640b \ub97c \ub3d9\uc2dc\uc5d0 \uac00\uc9c4\uac83\uacfc, b \ub97c \uac00\uc9c4\uac83\uc744 \uc120\ud0dd\n-- \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a&b,b\"):Each(function(item, index)\n print(item.Name)\nend)\n \ub610\ub294(or) \uc5f0\uc0b0 , \uadf8\ub9ac\uace0(and) \uc5f0\uc0b0 & GetObjects \uc5d0\ub294 \uc774 \ub450 \uc5f0\uc0b0\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uace0, \uc0dd\uc131\uc2dc\uc5d0\ub294 , \uc73c\ub85c \uc5ec\ub7ec \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub744\uc5b4\uc4f0\uae30\ub294 \ubb34\uc2dc\ub429\ub2c8\ub2e4
\uc8fc\uc758 : \uace0\uae09 ID \uc0ac\uc6a9\uc2dc objectList:Remove \uba54\uc18c\ub4dc\ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4
"},{"location":"tutorial/3_getObject/#id_1","title":"id \ucd94\uac00\uc640 \uc81c\uac70","text":"
\uacbd\uc6b0\uc5d0 \ub530\ub77c \uc774\ubbf8 \uc0dd\uc131\ud55c \uc624\ube0c\uc81d\ud2b8\uc5d0 id \ub97c \ucd94\uac00 \ud639\uc740 \uc81c\uac70\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Store = Quad.Store\n\nlocal Frame = Class \"Frame\"\n\nFrame \"testing\" {}\n\n-- \uc544\uc774\ub514\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4\nStore.AddObject(\n \"a,b\", Store.GetObject(\"testing\")\n)\n\n-- \uc544\uc774\ub514\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4\nStore.GetObjects(\"a\"):Remove(Store.GetObject(\"testing\"))\n Store.AddObject(ids:string, item:any) \ub97c \uc774\uc6a9\ud574 item \uc5d0 \uc544\uc774\ub514\ub97c \ucd94\uac00\ud558\uace0 :Remove(item:any) \ub97c \uc774\uc6a9\ud574 item \uc5d0 \uc544\uc774\ub514\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4
"},{"location":"tutorial/4_style/","title":"\ubc18\ubcf5\ub418\ub294 \uc18d\uc131\uac12\uc744 \uc904\uc774\uae30","text":"
\uc77d\uae30 \uc804...
\ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Style \uae30\ub2a5\uc774 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Style \ub294 \uacf5\uc720\ub429\ub2c8\ub2e4
Quad \uc5d0\uc11c\ub294 \ubc18\ubcf5\uc801\uc778 \uc18d\uc131\ub4e4\uc744 \uc904\uc5ec \uc4f8 \uc218 \uc788\ub3c4\ub85d Style \uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\n\n-- \uc0c8\ub85c\uc6b4 \uc2a4\ud0c0\uc77c\uc744 \ud558\ub098 \ub9cc\ub4ed\ub2c8\ub2e4\nlocal myStyle = Style {\n Size = UDim2.fromOffset(20,20);\n BackgroundColor3 = Color3.fromRGB(255,255,0);\n BackgroundTransparency = 0.5;\n}\n\nFrame \"mainFrame\" {\n Size = UDim2.fromScale(1,1);\n Frame \"Child\" {\n myStyle; -- \uc2a4\ud0c0\uc77c\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4!\n };\n Frame \"Child\" {\n Position = UDim2.fromOffset(30,0);\n myStyle;\n };\n Frame \"Child\" {\n Position = UDim2.fromOffset(60,0);\n myStyle;\n };\n Frame \"Child\" {\n Position = UDim2.fromOffset(90,0);\n -- \uc2a4\ud0c0\uc77c\uc740 \ub36e\uc5b4\uc368 \uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n BackgroundColor3 = Color3.fromRGB(255,0,0);\n myStyle;\n };\n}\n\nMount(ScreenGUI,Store.GetObject(\"mainFrame\"))\n Style\uc744 \uc0ac\uc6a9\ud558\uba74 \ub9ce\uc740 \uc591\uc758 \uc18d\uc131\uc744 \ud558\ub098\uc5d0 \ubcc0\uc218\ub85c \uc9d1\uc5b4\ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Style\uc744 \uc0ac\uc6a9\ud574\uc11c \ub9ce\uc740 \uc591\uc758 \ucf54\ub4dc\ub97c \uc904\uc5ec\ubcf4\uc138\uc694
\ub610, Style\uc5d0\ub294 \ud0c0\uac9f id\ub97c \uc9c0\uc815\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\n\n-- \uc5ec\uae30\uc5d0\ub294 & \ub098 , \uac00 \uc801\uc6a9\ub418\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4!\nStyle \"Child\" {\n Size = UDim2.fromOffset(20,20);\n BackgroundColor3 = Color3.fromRGB(255,255,0);\n BackgroundTransparency = 0.5;\n}\n\n-- \ub2e8, Style\uc740 \uba3c\uc800 \uc120\uc5b8\ud574\uc57c\ud569\ub2c8\ub2e4, Frame\uc744 \uba3c\uc800 \ub9cc\ub4e4\uace0\n-- Style\uc744 \uc120\uc5b8\ud558\uba74 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\nFrame \"mainFrame\" {\n Size = UDim2.fromScale(1,1);\n Frame \"Child\" {};\n Frame \"Child\" { Position = UDim2.fromOffset(30,0) };\n}\n\nMount(ScreenGUI,Store.GetObject(\"mainFrame\"))\n Style(id:string){ any }\ub97c \uc774\uc6a9\ud574 \uc2a4\ud0c0\uc77c\uc744 \uc120\uc5b8\ud574\uc8fc\uba74 \ub098\uc911\uc5d0 \ud574\ub2f9 id\ub97c \uac00\uc9c4 \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc \ud574\ub2f9 \uc2a4\ud0c0\uc77c\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4.
"},{"location":"tutorial/5_event/","title":"\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 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 \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\nFrame {\n [Event \"MouseEnter\"] = function (self)\n print(self.Name .. \"\uc5d0 \ub9c8\uc6b0\uc2a4\uac00 \uc62c\ub77c\uc654\uc2b5\ub2c8\ub2e4\")\n end;\n}\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.
\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.
-- \uc6a9\ubc95\nFrame {\n [Event.Created] = function (self)\n print(self.Name .. \"\uc774 \uc0dd\uc131\ub418\uc5c8\uc5b4\uc694\")\n end;\n}\n 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.
\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.
-- \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 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":"\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.
\ud2b8\uc708\uc740 \uc77c\ubc18\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc774 \uc218\ud589\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\"\nFrame \"mainFrame\" {\n Frame \"Child\" {\n Position = UDim2.fromOffset(0,0);\n Size = UDim2.fromOffset(20,20)\n };\n}\n\nMount(ScreenGUI, Store.GetObejct(\"mainFrame\"))\n\nlocal Child = Store.GetObject()\n \ud2b8\uc708 \uc635\uc158\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 EasingFunction \uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4
\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
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
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
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
Quad
\uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
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.
Sin
\uc0ac\uc778 \ud30c\ud615\uc744 \uc0ac\uc6a9\ud55c \ud568\uc218\uc785\ub2c8\ub2e4.
Circle
\uc6d0\ud615 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.
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\uae40\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":"tutorial/7_quadProperty/","title":"Quad \ub0b4\ubd80 \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":"\ub808\uc9c0\uc2a4\ud130","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
\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 \uc0ac\uc6a9\uc774 \uac00\ub2a5\ud569\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 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\"\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\nMount(ScreenGUI, Store.GetObject(\"mainLabel\"))\n\nlocal Count = 0\nwhile true do\n task.wait(1)\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 \ub808\uc9c0\uc2a4\ud130\uc5d0\ub294 \uc5ec\ub7ec\uac00\uc9c0 \uba54\uc18c\ub4dc\uac00 \ub2f4\uaca8\uc788\uc2b5\ub2c8\ub2e4. \uc774 \uba54\uc18c\ub4dc\ub97c \uc0ac\uc6a9\ud558\uba74 \ub808\uc9c0\uc2a4\ud130\ub97c \ubcf4\ub2e4 \ub354 \ub2e4\uc591\ud558\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
register \ud2b9\uc218 \uba54\uc18c\ub4dc\uac00 \uc801\uc6a9\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.
:Add(value:any)->register
\uac12\uc5d0 \ub354\ud558\uae30\ub97c \ucde8\ud569\ub2c8\ub2e4. \uc74c\uc218\ud615\ud0dc\uac00 \uc81c\uacf5\ub418\ub294 \uacbd\uc6b0 \ube7c\uae30 \ucc98\ub7fc \uc791\ub3d9\ud569\ub2c8\ub2e4. number, Udim, UDim2, Color3, Vector2 \ub4f1 \ub354\ud560 \uc218 \uc788\ub294 \ubaa8\ub4e0\uac83\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 \uc8fc\uc758 : \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.pos = UDim2.fromOffset(100,0)\n\nFrame \"mainFrame\" {\n Position = myStore \"pos\":Add(UDim2.fromOffset(0,100));\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile true do\n myStore.pos = myStore.pos + UDim2.fromOffset(10,0)\n task.wait(2)\nend\n :With((store:valueStore, newValue:any, key:string)->())->register
\ud568\uc218 \ub610\ub294 \ud14c\uc774\ube14\uc5d0\uc11c \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4. Add \ubcf4\ub2e4 \ub098\uc911\uc5d0 \uc218\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4 \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
\ud568\uc218\ud14c\uc774\ube14
-- \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.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 -- \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\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 BackgroundColor3 = myStore \"color\":With(colors);\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile task.wait(1) do\n myStore.color = (i-1)%(#colors)+2\nend\n :Tween(options:TweenOptions)
\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. \uc8fc\uc758 : \uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\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)\nend\n :Default(value:any)
\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. \uc8fc\uc758 : \ucc98\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \ub54c\uc5d0\ub9cc \uc774 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\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 :Register((store:valueStore, newValue:any, key:string)->())->nil
\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
-- \uc6a9\ubc95\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\n\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.test1 = 1\nmyStore.test2 = \"Hello\"\n\nmyStore \"test1,test2\":Register(function()\n print(myStore.test1,myStore.test2)\nend)\n\nmyStore.test1 = 2\n"},{"location":"tutorial/9_lang/","title":"\uc5b8\uc5b4\uad00\ub9ac","text":"
\uc77d\uae30 \uc804...
\ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Lang \uae30\ub2a5\uc774 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Lang \uc740 \uacf5\uc720\ub429\ub2c8\ub2e4
Quad \uc5d0\ub294 \uadc0\ucc2e\uc740 \uc5b8\uc5b4\uad00\ub9ac\ub97c \uc790\ub3d9\uc73c\ub85c \ud574\uc8fc\ub294 \uae30\ub2a5\uc774 \ub0b4\uc7a5\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 register \uc640 \uc5f0\ub3d9\ud574 \uc801\uc740 \uc904\uc758 \ucf54\ub4dc\ub85c \ubcc0\ud558\ub294 \ud14d\uc2a4\ud2b8\ub3c4 \uc5b8\uc5b4\uc5d0 \ub9de\uac8c \ucd9c\ub825\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Mount = Quad.Mount\nlocal Event = Quad.Event\nlocal Lang = Quad.Lang\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myStore = Store.GetStore(\"myStore\")\nmyStore.count = 0\n\nLang.New(\"TimePassed\",{\n [Lang.Locales.Korean] = \"{count}\ucd08 \uc9c0\ub0ac\uc5b4\uc694\";\n [Lang.Locales.Default] = function (options)\n -- \ud568\uc218 \ub610\ud55c \ub4f1\ub85d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n if options.count > 1 then\n return (\"%d seconds passed\"):format(options.count)\n else\n return (\"%d second passed\"):format(options.count)\n end\n end;\n})\n\nTextButton \"mainButton\" {\n Size = UDim2.fromOffset(100,100);\n Text = Lang \"TimePassed\" {\n -- count = 1 \uc77c\ubc18\uc801\uc778 \uac12\ub3c4 \uc0ac\uc6a9\uac00\ub2a5\ud569\ub2c8\ub2e4\n count = myStore \"count\";\n };\n [Event \"MouseButton1Click\"] = function()\n -- \ud074\ub9ad\uc2dc \uc5b8\uc5b4\uac00 \ubcc0\uacbd\ub429\ub2c8\ub2e4\n if Lang.CurrentLocale == Lang.Locales.Default then\n Lang.CurrentLocale = Lang.Locales.Korean\n else\n Lang.CurrentLocale = Lang.Locales.Default\n end\n end\n}\nMount(ScreenGUIk,Store.GetObject(\"mainButton\"))\n\nwhile task.wait(1) do\n myStore.count = myStore.count + 1\nend\n \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.
"}]}
\ No newline at end of file
diff --git a/docs/kr/sitemap.xml b/docs/kr/sitemap.xml
index 47fa456..235ffb7 100644
--- a/docs/kr/sitemap.xml
+++ b/docs/kr/sitemap.xml
@@ -2,127 +2,132 @@
https://quad.qwreey.kr/kr/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/changelogs/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/gallery/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/license/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/include/TweenOptions/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/include/direction/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/include/easings/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/include/events/
- 2023-02-20
+ 2023-02-21
+ daily
+
+
+ https://quad.qwreey.kr/kr/include/locales/
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/include/mounts/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/include/objectList/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/include/quadProperty/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/include/register/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/reference/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/tutorial/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/tutorial/10_signal/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/tutorial/11_extend/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/tutorial/1_import/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/tutorial/2_mount/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/tutorial/3_getObject/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/tutorial/4_style/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/tutorial/5_event/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/tutorial/6_tween/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/tutorial/7_quadProperty/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/tutorial/8_register/
- 2023-02-20
+ 2023-02-21
daily
https://quad.qwreey.kr/kr/tutorial/9_lang/
- 2023-02-20
+ 2023-02-21
daily
\ No newline at end of file
diff --git a/docs/kr/sitemap.xml.gz b/docs/kr/sitemap.xml.gz
index d2b1df759ed1c5d64bb510d15e247f897b2b43b8..06e04c7188c28a1e82e40d8d46b482f115aba34f 100644
GIT binary patch
literal 403
zcmV;E0c`#siwFqJiu7Xw|8r?{Wo=<_E_iKh0L|9DZi6ro0N}k(5wQmY=}%G-vURGI
z4(V*Ua3OAuO?*cPZ(l>AC~JpGXCVRh>Ga8x@0@SWjhUUmqjq*3rEwC?z?QDkwq8e{
zySMo=+7u6Y=M4hQLa@bkbRcS9h3NY}MorMD7GvjYf#o6mptw$oBwj_u!z_$3!R2cj
zxp8GNX2Fo=*r_T$_8wq}f4m4!F2?oyaD~*ks>qUTF;B92mWGh)++A3CP_~A>hhtGG
zZH8Rj&0HMf2KgK5lE}CkIqGU<4ETW~&FB&=0!Ny*rRgdVyB@%9TM9=2IXf%up&XT*
zk)SZt4%Yh!C$Pj?7^0K`*2Knj%s0_}eTU=nu8}w^$CVH7TJSV*c6zA8P6Es3>|qZ+
zTw7Rn8S2P+tqf~hnn={O<*rO6oC$2jTPbzZI!~;TnVbqZYvV%JK-;N`vvxj8q`~km
xK2LJG^{_TROB!$Dtc@>{d&9m_my&bOzA;zQgp~hJoL&f2`~ua6R$cTE0057u#drV!
literal 397
zcmV;80doEyiwFoFqw`|||8r?{Wo=<_E_iKh0L|9DZi6ro0N}k(f!Koy=}%G-vURGI
z4(V)BxHxW&O?*cPZ(l>AC~JpGXCVRh>Ga8h^W~d!W1
ziAtPbG?#dT7o$to@$qAjCVxrSJ반복되는 속성값을 줄이기
+읽기 전...
+
+모듈 설정시 . Init () 처럼 QuadId 란을 비워두는 경우 Style 기능이 코드를 넘어 공유되지 않습니다
+하지만 . Init ( "Project1" ) 처럼 아이디를 부여하는 경우 다른 모듈, 로컬스크립트가 접근하더라도 같은 QuadId 를 가졌다면 Style 는 공유됩니다
+
+Quad 에서는 반복적인 속성들을 줄여 쓸 수 있도록 Style 을 제공합니다.
1
2
3
diff --git a/docs/kr/tutorial/8_register/index.html b/docs/kr/tutorial/8_register/index.html
index 0f02f2b..ea6bd68 100644
--- a/docs/kr/tutorial/8_register/index.html
+++ b/docs/kr/tutorial/8_register/index.html
@@ -835,7 +835,7 @@
첫번째 값에는 편의상 스토어 값이 제공되며, 새로운 값과, 바뀐 값에 대한 키가 제공됩니다
주의 : 구조의 복잡성을 피하고자, 여러번 호출시 가장 마지막 호출된 것만 사용됩니다
-함수 테이블 여러 값이 묶임
+
함수 테이블
1
@@ -889,7 +889,9 @@
49
50
51
-52 -- 용법
local ScreenGUI = script . Parent
local Quad = require ( path . to . module ). Init ()
local Store = Quad . Store
@@ -918,6 +920,8 @@
Frame "Topbar" {
LayoutOrder = 1 ;
BackgroundColor3 = Color3 . fromRGB ( 255 , 0 , 0 );
+ -- 이렇게 여러 값을 묶어서 두 값이 변경됨, 혹은 그이상을
+ -- 만들 수 있습니다.
Size = myStore "topbarSize,width" : With ( function ()
return UDim2 . fromOffset ( myStore . width , myStore . topbarSize )
end );
@@ -972,11 +976,7 @@
26
27
28
-29
-30
-31
-32
-33 -- 용법
local ScreenGUI = script . Parent
local Quad = require ( path . to . module ). Init ()
local Store = Quad . Store
@@ -997,34 +997,16 @@
}
myStore . color = 1
- % ( # colors )
-
-
Frame "mainFrame" {
- BackgroundColor3 =
+ BackgroundColor3 = myStore "color" : With ( colors );
}
Mount ( ScreenGUI , Store . GetObject ( "mainFrame" ))
-while true do
-
- task . wait ( 1 )
+while task . wait ( 1 ) do
+ myStore . color = ( i - 1 ) % ( # colors ) + 2
end
-
-
-- 용법
-local ScreenGUI = script . Parent
-local Quad = require ( path . to . module ). Init ()
-local Store = Quad . Store
-local Class = Quad . Class
-local Mount = Quad . Mount
-
-
diff --git a/docs/kr/tutorial/9_lang/index.html b/docs/kr/tutorial/9_lang/index.html
index 78bea82..b411788 100644
--- a/docs/kr/tutorial/9_lang/index.html
+++ b/docs/kr/tutorial/9_lang/index.html
@@ -705,8 +705,104 @@
언어관리
-
Quad 에는 귀찮은 언어관리를 자동으로 해주는 모듈이 내장되어 있습니다.
-또한, register 와 연동해 변하는 텍스트도 알아서 언어에 맞게 출력되도록 만들 수 있습니다.
+
읽기 전...
+
+모듈 설정시 . Init () 처럼 QuadId 란을 비워두는 경우 Lang 기능이 코드를 넘어 공유되지 않습니다
+하지만 . Init ( "Project1" ) 처럼 아이디를 부여하는 경우 다른 모듈, 로컬스크립트가 접근하더라도 같은 QuadId 를 가졌다면 Lang 은 공유됩니다
+
+
Quad 에는 귀찮은 언어관리를 자동으로 해주는 기능이 내장되어 있습니다.
+이 기능은 register 와 연동해 적은 줄의 코드로 변하는 텍스트도 언어에 맞게 출력되도록 만들 수 있습니다.
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45 local ScreenGUI = script . Parent
+local Quad = require ( path . to . module ). Init ()
+local Store = Quad . Store
+local Mount = Quad . Mount
+local Event = Quad . Event
+local Lang = Quad . Lang
+local Class = Quad . Class
+
+local TextButton = Class "TextButton"
+
+local myStore = Store . GetStore ( "myStore" )
+myStore . count = 0
+
+Lang . New ( "TimePassed" ,{
+ [ Lang . Locales . Korean ] = "{count}초 지났어요" ;
+ [ Lang . Locales . Default ] = function ( options )
+ -- 함수 또한 등록할 수 있습니다.
+ if options . count > 1 then
+ return ( "%d seconds passed" ): format ( options . count )
+ else
+ return ( "%d second passed" ): format ( options . count )
+ end
+ end ;
+})
+
+TextButton "mainButton" {
+ Size = UDim2 . fromOffset ( 100 , 100 );
+ Text = Lang "TimePassed" {
+ -- count = 1 일반적인 값도 사용가능합니다
+ count = myStore "count" ;
+ };
+ [ Event "MouseButton1Click" ] = function ()
+ -- 클릭시 언어가 변경됩니다
+ if Lang . CurrentLocale == Lang . Locales . Default then
+ Lang . CurrentLocale = Lang . Locales . Korean
+ else
+ Lang . CurrentLocale = Lang . Locales . Default
+ end
+ end
+}
+Mount ( ScreenGUIk , Store . GetObject ( "mainButton" ))
+
+while task . wait ( 1 ) do
+ myStore . count = myStore . count + 1
+end
+
+
로케일 값들은 Lang . Locales 에서 가져올 수 있으며, 사용가능한 로케일 목록은 다음과 같습니다.
diff --git a/md/kr/assets/extra.css b/md/kr/assets/extra.css
index d90877f..21ce090 100644
--- a/md/kr/assets/extra.css
+++ b/md/kr/assets/extra.css
@@ -38,6 +38,11 @@ table.pretty {
-webkit-backdrop-filter: blur(3px);
}
+/* 디테일 안에 글자크기 */
+.md-typeset details {
+ font-size: .72rem !important;
+}
+
/*테이블 해더 꾸미기*/
th {
/*최소 길이*/
@@ -92,6 +97,9 @@ td {
--md-default-fg-color--lighter: rgb(105, 105, 105);
--md-default-fg-color--lightest: rgb(70, 70, 70);
+ /* 마커 */
+ --md-typeset-mark-color: hsl(271, 81%, 46%) !important;
+
/*배경 색깔*/
--md-default-bg-color: rgb(41, 43, 54);
--md-default-bg-color--light: hsla(232, 15%, 21%, 0.54);
diff --git a/md/kr/include/TweenOptions.md b/md/kr/include/TweenOptions.md
deleted file mode 100644
index 6193134..0000000
--- a/md/kr/include/TweenOptions.md
+++ /dev/null
@@ -1,26 +0,0 @@
-```ts
-export type TweenOptions = {
- Easing: "Linear"
- |"Quint"
- |"Quart"
- |"Cubic"
- |"Quad"
- |"Sin"
- |"Circle"
- |"Expo"
- |"Elastic"
- |"Bounce"
- |"Exp2"
- |"Exp4"
- |EasingFunction?;
- Direction: "Out"|"InOut"|"In"|EasingDirection?;
- CallBack: {[number|"*"|string]:(Item:DOM|any,Alpha:number,AbsolutePercent:number)->()}?;
- OnStepped: TweenOnStepped?;
- // 일반적으로 CallBack 에 ['*']=()->() 를
- // 등록하는것과 같으나 성능상의 이점이 있습니다
- Ended: TweenEnded?;
- Getter: TweenGetter?;
- Setter: TweenSetter?;
- Time: number?;
-}
-```
\ No newline at end of file
diff --git a/md/kr/include/direction.md b/md/kr/include/direction.md
index 0a1e520..4a58718 100644
--- a/md/kr/include/direction.md
+++ b/md/kr/include/direction.md
@@ -1,8 +1,12 @@
`Out`
초반에 가속이 이루워지며, 후반에 느려집니다.
+---
+
`In`
초반에는 느리며, 점점 가속이 늘어납니다.
+---
+
`InOut`
중간에서 가장 빠른 속도를 가지며, 후반 초반 모두 감속이 이루워집니다.
diff --git a/md/kr/include/easings.md b/md/kr/include/easings.md
index 68f388e..7cc7736 100644
--- a/md/kr/include/easings.md
+++ b/md/kr/include/easings.md
@@ -4,41 +4,49 @@
`Linear`
> 아무런 가감속이 없는 1차형 함수입니다
+> `#!ts i=x, x=0 to 1`
---
`Quint`
> 5 제곱을 이용한 가감속 함수입니다. Quart 보다 가파른 개형을 가졌습니다
+> `#!ts (^5) i=1-(1-x)^5, x=0 to 1`
---
`Quart`
> 네제곱을 이용한 가감속 함수입니다. Cubic 보다 가파른 개형을 가졌습니다
+> `#!ts (^4) i=1-(1-x)^4, x=0 to 1`
---
`Cubic`
> 세제곱을 이용한 가감속 함수입니다. Quad 보다 가파른 개형을 가졌습니다
+> `#!ts (^3) i=1-(1-x)^3, x=0 to 1`
---
`Quad`
> 제곱을 이용한 가감속 함수입니다.
+> `#!ts (^2) i=1-(1-x)^2, x=0 to 1`
---
`Expo`
> 지수형 가감속 함수입니다. 매우 가파른 개형을 가졌습니다.
+> `#!ts i=1-2^(-10*x), x=0 to 1`
---
`Sin`
-> 사인 파형을 사용한 함수입니다.
+> 사인 파형 가감속 함수입니다.
+> `#!ts i=sin(x*pi/2), x=0 to 1`
---
`Circle`
-> 원형 가감속 함수입니다.
+> 사분원 가감속 함수입니다.
+> `#!ts i=sqrt(1-(1-x)^2), x=0 to 1`
---
@@ -53,6 +61,6 @@
---
`Bounce`
-> 튀김을 가지는 가감속 함수입니다.
+> 튀어오름을 가지는 가감속 함수입니다.
TODO: 애니메이션 미리보기 영상 추가
diff --git a/md/kr/include/events.md b/md/kr/include/events.md
index e241258..5cd68db 100644
--- a/md/kr/include/events.md
+++ b/md/kr/include/events.md
@@ -15,7 +15,9 @@ Frame {
`#!ts Event.Created`
> 오브젝트가 생성되었을 때 실행됩니다. 첫번째 인자로 `self` 를 받을 수 있습니다.
-*주의: Event.Created 가 실행될 때는 Parent 값이 정해지지 않았을 수 있습니다. self.Parent 는 접근해서는 안됩니다. Class.Extend 에서는 AfterRender 를 이용해야 합니다.*
+???+ Warning "주의"
+ `Event.Created` 가 실행될 때는 `Parent` 값이 정해지지 않았을 수 있습니다. `#!lua self.Parent` 는 접근해서는 안됩니다. `Class.Extend` 에서는 `AfterRender` 를 이용해야 합니다.
+
```lua
-- 용법
Frame {
@@ -30,7 +32,9 @@ Frame {
`#!ts Event.CreatedAsync`
> `#!ts Event.Created` 와 비슷하지만, 코루틴 안에서 작동합니다. `#!ts objectList:EachAsync()` 처럼 반환을 기다리지 않습니다.
-*주의: Event.CreatedAsync 가 실행될 때는 Parent 값이 정해지지 않았을 수 있습니다. self.Parent 는 접근해서는 안됩니다.*
+???+ Warning "주의"
+ `Event.CreatedAsync` 가 실행될 때는 `Parent` 값이 정해지지 않았을 수 있습니다. `#!lua self.Parent` 는 접근해서는 안됩니다.
+
```lua
-- 용법
Frame {
diff --git a/md/kr/include/locales.md b/md/kr/include/locales.md
new file mode 100644
index 0000000..f836f28
--- /dev/null
+++ b/md/kr/include/locales.md
@@ -0,0 +1,48 @@
+
+**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)
diff --git a/md/kr/include/register.md b/md/kr/include/register.md
index 89900fb..6cf2a88 100644
--- a/md/kr/include/register.md
+++ b/md/kr/include/register.md
@@ -31,11 +31,22 @@ end
```
`#!ts :With((store:valueStore, newValue:any, key:string)->())->register`
-> 함수 또는 테이블에서 값을 가져옵니다. Add 보다 나중에 수행됩니다.
-> 첫번째 값에는 편의상 스토어 값이 제공되며, 새로운 값과, 바뀐 값에 대한 키가 제공됩니다
-> *주의 : 구조의 복잡성을 피하고자, 여러번 호출시 가장 마지막 호출된 것만 사용됩니다*
+
-=== "함수"
+함수 또는 테이블에서 값을 가져옵니다. Add 보다 나중에 수행됩니다.
+첫번째 값에는 편의상 스토어 값이 제공되며, 새로운 값과, 바뀐 값에 대한 키가 제공됩니다
+
+=== "용법"
+
+ ```lua
+ myStore "size":With(function (_,value)
+ return value * 2
+ end)
+ ```
+
+=== "예제 - 함수"
+
+ `width` 값에 맞춰 자동으로 UI 가 업데이트되도록 만듭니다.
```lua
-- 용법
@@ -67,6 +78,8 @@ end
Frame "Topbar" {
LayoutOrder = 1;
BackgroundColor3 = Color3.fromRGB(255,0,0);
+ -- 이렇게 여러 값을 묶어서 두 값이 변경됨, 혹은 그이상을
+ -- 만들 수 있습니다.
Size = myStore "topbarSize,width":With(function()
return UDim2.fromOffset(myStore.width,myStore.topbarSize)
end);
@@ -92,7 +105,9 @@ end
end
```
-=== "테이블"
+=== "예제 - 테이블"
+
+ `colors` 테이블 안에 있는 색깔들을 돌아가며 보여줍니다.
```lua
-- 용법
@@ -117,6 +132,7 @@ end
myStore.color = 1
Frame "mainFrame" {
+ Size = UDim2.fromOffset(200,200);
BackgroundColor3 = myStore "color":With(colors);
}
Mount(ScreenGUI, Store.GetObject("mainFrame"))
@@ -126,78 +142,79 @@ end
end
```
-=== "여러 값이 묶임"
-
- ```lua
- -- 용법
- local ScreenGUI = script.Parent
- local Quad = require(path.to.module).Init()
- local Store = Quad.Store
- local Class = Quad.Class
- local Mount = Quad.Mount
- ```
+???+ Warning "주의"
+ 구조의 복잡성을 피하고자, 여러번 호출시 가장 마지막 호출된 것만 사용됩니다
+
---
`#!ts :Tween(options:TweenOptions)`
> 트윈을 이용해 변경사항을 적용합니다(처음 오브젝트 생성시에는 적용되지 않음) 옵션은 Tween 문서에 나와있는 옵션과 같습니다.
-> *주의 : 구조의 복잡성을 피하고자, 여러번 호출시 가장 마지막 호출된 것만 사용됩니다*
-```lua
--- 용법
-local ScreenGUI = script.Parent
-local Quad = require(path.to.module).Init()
-local Store = Quad.Store
-local Class = Quad.Class
-local Mount = Quad.Mount
-local Style = Quad.Style
+=== "용법"
-local Frame = Class "Frame"
-local myStore = Store.GetStore("myStore")
-myStore.pos = UDim2.fromOffset(50,0)
-Style "TweenFrame" {
- Size = UDim2.fromOffset(50,50);
- BackgroundColor3 = Color3.fromRGB(255,100,255);
-}
+ ```lua
+ -- Tween 옵션을 넣을 수 있습니다
+ myStore "size":Tween{ Time = 2 }
+ ```
-Frame "mainFrame" {
- BackgroundColor3 = Color3.fromRGB(255,255,255);
- Size = UDim2.fromOffset(500,500);
- Frame "TweenFrame" {
- Position = myStore "pos":Tween{Time = 2};
- };
- Frame "TweenFrame" {
- Position = myStore "pos"
- :Add(UDim2.fromOffset(0,100))
- :Tween{Time = 2};
- };
- Frame "TweenFrame" {
- Position = myStore "pos"
- :Add(UDim2.fromOffset(0,200))
- :Tween{Time = 2};
- };
- Frame "TweenFrame" {
- Position = myStore "pos"
- :Add(UDim2.fromOffset(0,300))
- :Tween{Time = 2};
+=== "예제"
+
+ ```lua
+ local ScreenGUI = script.Parent
+ local Quad = require(path.to.module).Init()
+ local Store = Quad.Store
+ local Class = Quad.Class
+ local Mount = Quad.Mount
+ local Style = Quad.Style
+
+ local Frame = Class "Frame"
+ local myStore = Store.GetStore("myStore")
+ myStore.pos = UDim2.fromOffset(50,0)
+ Style "TweenFrame" {
+ Size = UDim2.fromOffset(50,50);
+ BackgroundColor3 = Color3.fromRGB(255,100,255);
}
-}
-Mount(ScreenGUI, Store.GetObject("mainFrame"))
+ Frame "mainFrame" {
+ BackgroundColor3 = Color3.fromRGB(255,255,255);
+ Size = UDim2.fromOffset(500,500);
+ Frame "TweenFrame" {
+ Position = myStore "pos":Tween{Time = 2};
+ };
+ Frame "TweenFrame" {
+ Position = myStore "pos"
+ :Add(UDim2.fromOffset(0,100))
+ :Tween{Time = 2};
+ };
+ Frame "TweenFrame" {
+ Position = myStore "pos"
+ :Add(UDim2.fromOffset(0,200))
+ :Tween{Time = 2};
+ };
+ Frame "TweenFrame" {
+ Position = myStore "pos"
+ :Add(UDim2.fromOffset(0,300))
+ :Tween{Time = 2};
+ }
+ }
-local on = false
-while true do
- on = not on
- myStore.pos = on and UDim2.fromOffset(400,0) or UDim2.fromOffset(50,0)
-end
-```
+ Mount(ScreenGUI, Store.GetObject("mainFrame"))
+
+ local on = false
+ while true do
+ on = not on
+ myStore.pos = on and UDim2.fromOffset(400,0) or UDim2.fromOffset(50,0)
+ end
+ ```
+???+ Warning "주의"
+ 구조의 복잡성을 피하고자, 여러번 호출시 가장 마지막 호출된 것만 사용됩니다
---
`#!ts :Default(value:any)`
> 기본값을 정합니다. 만약 값이 `#!lua nil` 인 경우 이 값을 사용하게 됩니다. Add 나 With 등 다른것에 영향받지 않습니다.
> *주의 : 처음 오브젝트가 생성될 때에만 이 값이 사용됩니다.*
-
```lua
-- 용법
local ScreenGUI = script.Parent
diff --git a/md/kr/include/tweenOptions.md b/md/kr/include/tweenOptions.md
new file mode 100644
index 0000000..7a5cb1e
--- /dev/null
+++ b/md/kr/include/tweenOptions.md
@@ -0,0 +1,55 @@
+
+==OPTION== `#!ts Time:number?`
+> 트윈의 총 길이를 정합니다. *아무 값도 지정하지 않으면 `#!ts 1`이 사용됩니다.*
+
+---
+
+==OPTION== `#!ts Easing:string|(index:number)->number?`
+> 트윈의 가감속 정도를 결정합니다. 문자열 그대로 사용하거나, `#!ts Tween.Easings.Linear`와 같이 열거형 방식으로 사용할 수 있습니다.
+> 혹은 필요에 따라 함수를 지정할 수도 있습니다. 함수를 Easing 으로 사용하는 경우 첫번째 인자로 1차 진행도 (Linear, 0 에서 1 사이의 값) 값이 주어지며, 계산 결과로 실제 적용될 위치를 반환해야합니다. 반환값은 음수이거나 1 보다 클 수 있습니다.
+> *아무 값도 지정하지 않으면 `Exp2`가 사용됩니다.*
+{!include/typeEasings.md!}
+> 함수에 관한 자세한 설명과 미리보기는 [여기에서](../reference/tween/easings) 확인하세요
+
+---
+
+==OPTION== `#!ts Direction:string?`
+> 트윈이 진행되는 방향입니다. 문자열 그대로 사용하거나, `#!ts Tween.Directions.Out`과 같이 열거형 방식으로 사용할 수 있습니다.
+> *아무 값도 지정하지 않으면 `Out`이 사용됩니다.*
+{!include/typeDirection.md!}
+> 방향에 관한 자세한 설명과 미리보기는 [여기에서](../reference/tween/directions) 확인하세요
+
+---
+
+==OPTION== `#!ts CallBack:{[number|"*"|string]:(Item:any, Alpha:number, AbsolutePercent:number)->()}?`
+> 선택적인 필드이며, 트윈이 실행중인 도중에 함수를 실행시킬 수 있습니다. 트윈의 진행 정도에 따라서 한번 함수가 실행되거나 트윈 진행중 계속해서 실행되도록 만들 수 있습니다.
+> 인덱스가 숫자인 경우 해당 지점을 넘을 때 함수가 실행되도록 만들 수 있으며, `#!lua "*"` 를 인덱스로 사용하면 모든 부분에서 함수가 실행됩니다.
+> 함수에는 편의상 트윈을 하고있는 오브젝트, 위치값, 시간만을 고려한 1차 위치값이 제공됩니다.
+
+---
+
+==OPTION== `#!ts OnStepped:(Item:any, Alpha:number, AbsolutePercent:number)->()?`
+> CallBack 에 `#!lua "*"` 를 넣은것과 동일한 효과를 가지는 별칭입니다
+
+---
+
+==OPTION== `#!ts Ended:(Item:any, Alpha:number, AbsolutePercent:number)->()?`
+> CallBack 에 `#!lua 1`을 넣은것과 동일한 효과를 가지는 별칭입니다
+
+---
+
+==OPTION== `#!ts Getter:(Item:any, Property:string)->any?`
+> 선택적인 필드이며, 트윈이 값을 얻으려 할 때 사용할 함수입니다.
+> 함수에 트윈하고 있는 오브젝트, 프로퍼티 이름이 제공됩니다.
+> ???+ warning
+ `#!ts register:Tween()` 와 호환되지 않습니다.
+
+---
+
+==OPTION== `#!ts Getter:(Item:any, Property:string, Value:Lerpable)->any?`
+> 선택적인 필드이며, 트윈이 값을 설정하려 할 때 사용할 함수입니다.
+> 함수에 트윈하고 있는 오브젝트, 프로퍼티 이름, 설정할 값이 제공됩니다.
+> ???+ warning
+ `#!ts register:Tween()` 와 호환되지 않습니다.
+
+
diff --git a/md/kr/include/typeDirection.md b/md/kr/include/typeDirection.md
new file mode 100644
index 0000000..1810f4b
--- /dev/null
+++ b/md/kr/include/typeDirection.md
@@ -0,0 +1,9 @@
+```ts
+type Direction =
+ // 초반에 가속이 이루워지며, 후반에 느려집니다.
+ "Out"
+ // 초반에는 느리며, 점점 가속이 늘어납니다.
+ |"In"
+ //중간에서 가장 빠른 속도를 가지며, 후반 초반 모두 감속이 이루워집니다.
+ |"InOut"
+```
\ No newline at end of file
diff --git a/md/kr/include/typeEasings.md b/md/kr/include/typeEasings.md
new file mode 100644
index 0000000..2952cbf
--- /dev/null
+++ b/md/kr/include/typeEasings.md
@@ -0,0 +1,17 @@
+```ts
+type Easing =
+ "Linear" // 아무런 가감속이 없는 1차형
+ |"Quint" // 5 제곱
+ |"Quart" // 네제곱
+ |"Cubic" // 세제곱
+ |"Quad" // 제곱
+ |"Sin" // 사인 파형
+ |"Circle" // 사분원
+ |"Expo" // 지수형
+ |"Elastic" // 탄성
+ |"Bounce" // 튀어오름
+ |"Back" // 뒤로 가감속
+ |"Exp2" // 덜 가파른 지수 i=exp(x)/max, x=-4 to 2
+ |"Exp4" // 더 가파른 지수 i=exp(x)/max, x=-4 ~ 4
+ |EasingFunction?;
+```
\ No newline at end of file
diff --git a/md/kr/license.md b/md/kr/license.md
index cbd9960..b1783c1 100644
--- a/md/kr/license.md
+++ b/md/kr/license.md
@@ -1,11 +1,6 @@
-=== "왜안됨"
-
- 왜 안돌아가냐
-
=== "Korean"
- 왜 안돌아가냐
```
qwreeykawaii license v1.3
Copyright 2023. Qwreey [qwreey75@gmail.com]
diff --git a/md/kr/reference/tween/directions.md b/md/kr/reference/tween/directions.md
new file mode 100644
index 0000000..e69de29
diff --git a/md/kr/reference/tween/easings.md b/md/kr/reference/tween/easings.md
new file mode 100644
index 0000000..e69de29
diff --git a/md/kr/tutorial/1_import.md b/md/kr/tutorial/1_import.md
index b74bfd3..05339bf 100644
--- a/md/kr/tutorial/1_import.md
+++ b/md/kr/tutorial/1_import.md
@@ -1,5 +1,7 @@
-# 로블록스 오브젝트 불러오기
+# Import - 오브젝트 생성
+
+## 로블록스 오브젝트 불러오기
Frame 과 같은 UI 오브젝트를 만들고 싶은 경우 먼저 import 를 이용해주어야 합니다.
다음과 같이 입력해보세요!
@@ -23,7 +25,12 @@ print(
나중에 자신만의 UI 오브젝트를 생성할 수 있지만, 일반적인 로블록스가 지원하는 오브젝트의 경우 `#!ts Class(ClassName:string)` 으로 불러올 수 있습니다
-불러온 Class 에 기본값을 설정할 수도 있습니다
+---
+
+## 불러온 Class 에 기본값 설정
+
+불러온 Class 에 기본값을 설정할 수도 있습니다.
+이렇게 하면 `BorderSizePixel` 와 같이 자주 사용될 수 있는 프로퍼티를 미리 지정해 둘 수 있습니다.
```lua
local Quad = require(path.to.module).Init()
@@ -37,8 +44,15 @@ FrameWithBorder.BorderSizePixel = 1
local frame1 = FrameWithoutBorder {}
local frame2 = FrameWithBorder {}
-print(frame1.FrameWithBorder)
-print(frame2.FrameWithBorder)
+local frame3 = FrameWithBorder {
+ -- 값을 덮어 쓸 수 있습니다
+ -- 이렇게 하면 기본값이 무시됩니다.
+ BorderSizePixel = 0;
+}
+
+print(frame1.FrameWithBorder.BorderSizePixel)
+print(frame2.FrameWithBorder.BorderSizePixel)
+print(frame3.FrameWithBorder.BorderSizePixel)
```
이제 그려낸 프레임을 화면에 그려보고 싶나요? 다음 튜토리얼 Mount 를 확인해보세요!
diff --git a/md/kr/tutorial/2_mount.md b/md/kr/tutorial/2_mount.md
index 55a41f2..3f76154 100644
--- a/md/kr/tutorial/2_mount.md
+++ b/md/kr/tutorial/2_mount.md
@@ -1,5 +1,7 @@
-# 화면에 UI 를 표시하기
+# Mount - 화면에 UI 표현
+
+## 화면에 UI 를 표시하기
일반적으로 *Quad* 모듈에서 모든 Parent 처리는 `#!ts Mount` 를 이용합니다. `#!ts Mount(to:any,...item:any?)->mounts` 함수를 이용하면 다루는 오브젝트가 로블록스 `Instance` 인지, 향후 소개될 Quad 확장 클래스인지 상관없이 알아서 Parent 가 처리됩니다.
@@ -22,6 +24,10 @@ Mount(ScreenGui,
)
```
+---
+
+## 마운트 객체
+
편의를 위해서 `Mount` 함수는 `mounts` 라는 객체를 반환합니다. 이것을 이용하면 필요에 따라서 Mount 상태를 해제하거나 추가 할 수 있습니다. `mounts` 객체는 다음과 같은 메소드를 가집니다.
{!include/mounts.md!}
diff --git a/md/kr/tutorial/3_getObject.md b/md/kr/tutorial/3_getObject.md
index 9b78093..08ba518 100644
--- a/md/kr/tutorial/3_getObject.md
+++ b/md/kr/tutorial/3_getObject.md
@@ -1,11 +1,15 @@
-# 오브젝트에 아이디 부여하기, 그리고 사용하기
+# GetObject - 오브젝트에 아이디 부여
-읽기 전...
-> 모듈 설정시 `#!ts .Init()` 처럼 QuadId 란을 비워두는 경우 `#!ts Store.GetObject` 가 코드를 넘어 공유되지 않습니다
-> 하지만 `#!ts .Init("Project1")` 처럼 아이디를 부여하는 경우 **다른 모듈, 로컬스크립트가 접근하더라도 같은 QuadId 를 가졌다면 `#!ts Store.GetObject` 는 공유됩니다**
+???+ info "읽기 전..."
+ 모듈 설정시 `#!ts .Init()` 처럼 QuadId 란을 비워두는 경우 `#!ts Store.GetObject` 가 코드를 넘어 공유되지 않습니다
+ 하지만 `#!ts .Init("Project1")` 처럼 아이디를 부여하는 경우 **다른 모듈, 로컬스크립트가 접근하더라도 같은 QuadId 를 가졌다면 `#!ts Store.GetObject` 는 공유됩니다**
-**변수에 만들어진 오브젝트를 하나하나 저장해???** 그게 편할리가 없죠. 오브젝트에 아이디를 넣고 사용해봅시다.
+---
+
+## 오브젝트에 아이디 부여하기, 사용하기
+
+**변수에 만들어진 오브젝트를 하나하나 저장해야하나요?** 아니요, Quad 에는 오브젝트에 아이디를 부여할 수 있습니다.
```lua
local ScreenGUI = script.Parent
@@ -37,9 +41,10 @@ print(Store.GetObject("mainFrame" .. index))
## 다량의 오브젝트를 다루기
-또한, Quad 는 다량의 오브젝트를 다루기 편하도록 `#!ts Store.GetObjects(id:string)->objectList` 라는 함수를 가지고 있습니다.
+???+ Warning "주의"
+ `Store.GetObjects`의 반환값인 `objectList`는 캐시해서는 안됩니다. `objectList`를 local 에 넣고 계속해서 유지시키지 마십시오, 반환값은 자동으로 업데이트 되지 않습니다.
-> 주의 : *GetObjects 의 반환값인 objectList 는 캐시해서는 안됩니다. objectList 를 local 에 넣고 계속해서 유지시키지 마십시오, 반환값은 자동으로 업데이트 되지 않습니다.*
+Quad 는 다량의 오브젝트를 다루기 편하도록 `#!ts Store.GetObjects(id:string)->objectList` 라는 함수를 가지고 있습니다.
실험으로, 색깔이 랜덤하게 바뀌는 프레임들을 만들어 봅시다
@@ -95,6 +100,8 @@ for _,child in ipairs(Store.GetObjects("Child")) do
end
```
+### objectList
+
`#!ts Store.GetObjects()` 의 반환 `#!ts objectList` 의 메소드들은 다음과 같습니다.
{!include/objectList.md!}
@@ -105,55 +112,68 @@ end
id 기능을 조금더 고급적인 방법으로 사용할 수도 있습니다.
-```lua
-local ScreenGUI = script.Parent
-local Quad = require(path.to.module).Init()
-local Class = Quad.Mount
-local Mount = Quad.Store
-local Store = Quad.Class
+=== 용법
-local Frame = Class "Frame"
+ ```lua
+ Frame "a,b" {
+
+ }
+ ```
---다음과 같이 a 와 b 모두 가진 프레임을 생성할 수도 있습니다.
-Frame "a,b" {
- Name = "main";
- Frame "a" {
- Name = "Child1";
- };
- Frame "b" {
- Name = "Child2";
- };
-}
+=== 예제
--- 다음과 같이 a 와 b 둘다 선택할 수 있습니다
-Store.GetObjects("a,b"):Each(function(item, index)
- print(item.Name)
-end)
-print("----")
+ 좀더 직관적인 확인을 위해서 작동시켜보세요.
--- 다음과 같이 a 와 b 를 동시에 가진 것을 선택할 수 있습니다
-Store.GetObjects("a&b"):Each(function(item, index)
- print(item.Name)
-end)
-print("----")
+ ```lua
+ local ScreenGUI = script.Parent
+ local Quad = require(path.to.module).Init()
+ local Class = Quad.Mount
+ local Mount = Quad.Store
+ local Store = Quad.Class
--- 다음과 같이 a와b 를 동시에 가진것과, b 를 가진것을 선택
--- 할 수 있습니다
-Store.GetObjects("a&b,b"):Each(function(item, index)
- print(item.Name)
-end)
-```
+ local Frame = Class "Frame"
+
+ --다음과 같이 a 와 b 모두 가진 프레임을 생성할 수도 있습니다.
+ Frame "a,b" {
+ Name = "main";
+ Frame "a" {
+ Name = "Child1";
+ };
+ Frame "b" {
+ Name = "Child2";
+ };
+ }
+
+ -- 다음과 같이 a 와 b 둘다 선택할 수 있습니다
+ Store.GetObjects("a,b"):Each(function(item, index)
+ print(item.Name)
+ end)
+ print("----")
+
+ -- 다음과 같이 a 와 b 를 동시에 가진 것을 선택할 수 있습니다
+ Store.GetObjects("a&b"):Each(function(item, index)
+ print(item.Name)
+ end)
+ print("----")
+
+ -- 다음과 같이 a와b 를 동시에 가진것과, b 를 가진것을 선택
+ -- 할 수 있습니다
+ Store.GetObjects("a&b,b"):Each(function(item, index)
+ print(item.Name)
+ end)
+ ```
+ 또는(or) 연산 `#!ts ,`
+ 그리고(and) 연산 `#!ts &`
GetObjects 에는 이 두 연산을 사용할 수 있고, 생성시에는 `#!ts ,` 으로 여러 아이디를 부여해줄 수 있습니다. *띄어쓰기는 무시됩니다*
-> 주의 : *고급 ID 사용시 `#!ts objectList:Remove` 메소드는 사용할 수 없습니다*
+???+ Warning "주의"
+ 고급 ID 사용시 `#!ts objectList:Remove` 메소드는 사용할 수 없습니다
---
-# id 추가와 제거
+## id 추가와 제거
경우에 따라 이미 생성한 오브젝트에 id 를 추가 혹은 제거해줄 수 있습니다
diff --git a/md/kr/tutorial/4_style.md b/md/kr/tutorial/4_style.md
index 8f252a9..3151185 100644
--- a/md/kr/tutorial/4_style.md
+++ b/md/kr/tutorial/4_style.md
@@ -1,6 +1,14 @@
# 반복되는 속성값을 줄이기
+???+ info "읽기 전..."
+ 모듈 설정시 `#!ts .Init()` 처럼 QuadId 란을 비워두는 경우 `Style` 기능이 코드를 넘어 공유되지 않습니다
+ 하지만 `#!ts .Init("Project1")` 처럼 아이디를 부여하는 경우 **다른 모듈, 로컬스크립트가 접근하더라도 같은 QuadId 를 가졌다면 `Style` 는 공유됩니다**
+
+---
+
+Quad 에서는 반복적인 속성들을 줄여 쓸 수 있도록 Style 을 제공합니다.
+
```lua
local ScreenGUI = script.Parent
local Quad = require(path.to.module).Init()
diff --git a/md/kr/tutorial/5_event.md b/md/kr/tutorial/5_event.md
index 288b673..8e80f39 100644
--- a/md/kr/tutorial/5_event.md
+++ b/md/kr/tutorial/5_event.md
@@ -1,5 +1,7 @@
-# 이벤트 등록하기
+# Event - 이벤트 핸들링
+
+## 이벤트 등록하기
`MouseButton1Click` 혹은 `GetPropertyChangedSignal` 같은 로블 기본 이벤트를 간단하게 등록하고 싶으신가요? Event 를 이용해보세요.
@@ -24,6 +26,10 @@ TextButton "mainButton" {
Mount(ScreenGUI, Store.GetObject("mainButton"))
```
+---
+
+## 이밴트 리스트
+
적용가능한 Event 들은 다음과 같습니다
{!include/events.md!}
diff --git a/md/kr/tutorial/6_tween.md b/md/kr/tutorial/6_tween.md
index 2e76c92..0bbf633 100644
--- a/md/kr/tutorial/6_tween.md
+++ b/md/kr/tutorial/6_tween.md
@@ -1,30 +1,76 @@
-# 트위닝
+# Tween - 트윈효과
+
+## 트위닝
Quad에는 트윈을 도와주는 모듈이 내장되어 있습니다. 이 트윈 모듈은 단순한 Instance들을 넘어서 table 형식도 트윈을 수행할 수 있습니다. 이는 나중에 커스텀 오브젝트를 트윈할 때 유용합니다.
+Quad 에서는 실제로 직접적으로 Tween 을 사용할 일은 적으며 추후 설명되는 `#!ts register:Tween()`로 사용하는것이 권장됩니다
트윈은 일반적으로 다음과 같이 수행합니다.
-```lua
-local ScreenGUI = script.Parent
-local Quad = require(path.to.module).Init()
-local Class = Quad.Class
-local Mount = Quad.Mount
-local Tween = Quad.Tween
+=== "용법"
-local Frame = Class "Frame"
-Frame "mainFrame" {
- Frame "Child" {
- Position = UDim2.fromOffset(0,0);
- Size = UDim2.fromOffset(20,20)
- };
-}
+ ```lua
+ Tween.RunTween(myFrame,{
+ -- 트윈 옵션
+ Easing = Tween.Easing.Expo;
+ Direction = Tween.Directions.Out;
+ Time = 1;
+ ...
+ },{
+ -- 프로퍼티 목록
+ })
+ ```
-Mount(ScreenGUI, Store.GetObejct("mainFrame"))
+=== "사용 예"
-local Child = Store.GetObject()
-```
+ 클릭시 움직이는 버튼을 구현합니다.
-트윈 옵션에서 사용할 수 있는 `EasingFunction` 은 다음과 같습니다
+ ```lua
+ local ScreenGUI = script.Parent
+ local Quad = require(path.to.module).Init()
+ local Class = Quad.Class
+ local Mount = Quad.Mount
+ local Tween = Quad.Tween
-{!include/easings.md!}
+ local Frame = Class "Frame"
+ local TextButton = Class "TextButton"
+ local on = false
+
+ Frame "mainFrame" {
+ Size = UDim2.fromOffset(300,300);
+ BackgroundColor3 = Color3.fromRGB(255,255,255);
+ TextButton "Child" {
+ Text = "Click Me!";
+ BackgroundColor3 = Color3.fromRGB(255,100,255);
+ Position = UDim2.fromOffset(80,100);
+ Size = UDim2.fromOffset(20,20);
+ [Event "MouseButton1Click"] = function(self,x,y)
+ on = not on
+ Tween.RunTween(self,{
+ -- 트윈 옵션입니다. 아래에서 설명됩니다
+ Easing = Tween.Easing.Expo;
+ Direction = Tween.Directions.Out;
+ Time = 1;
+ },{
+ -- 트윈할 목표 프로퍼티입니다
+ Position = on
+ and UDim2.fromOffset(200,100)
+ or UDim2.fromOffset(80,100);
+ })
+ end;
+ };
+ }
+
+ Mount(ScreenGUI, Store.GetObejct("mainFrame"))
+ ```
+
+---
+
+## 트윈 옵션
+
+트윈에는 트윈 옵션이 들어가며, 여기에는 트윈의 방향, 가감속, 시간 등을 설정해줄 수 있습니다.
+
+넣을 수 있는 트윈 옵션은 다음과 같습니다.
+
+{!include/tweenOptions.md!}
diff --git a/md/kr/tutorial/7_quadProperty.md b/md/kr/tutorial/7_quadProperty.md
index 49fc085..613eb0a 100644
--- a/md/kr/tutorial/7_quadProperty.md
+++ b/md/kr/tutorial/7_quadProperty.md
@@ -1,8 +1,16 @@
-# Quad 내부 프로퍼티
+# QuadProperty - 특수 프로퍼티
+
+???+ Failure "주의사항"
+ 특수 프로퍼티는 `Tween` 이 지원되지 않습니다. 그러나 `register`의 `#!ts :Tween()`의 경우 호환되므로, 특수 프로퍼티 값을 트윈하려면 향후 설명되는 `register` 와 함깨 사용해야합니다.
+ > `#!ts Tween.RunTween`, `#!ts Tween.RunTweens` 와는 같이 사용할 수 없습니다.
+
+---
+
+## 특수한 프로퍼티
Quad 에서는 편리성을 위해 일부 특수 프로퍼티를 사용할 수 있습니다.
-*이 모든 특수 프로퍼티는 향후 소개되는 `register`와 함깨 사용할 수 있습니다*
+*이 모든 특수 프로퍼티는 향후 소개되는 `register`와 함깨 사용할 수 있습니다*
```lua
local ScreenGUI = script.Parent
diff --git a/md/kr/tutorial/8_register.md b/md/kr/tutorial/8_register.md
index f596db1..0cf3eaa 100644
--- a/md/kr/tutorial/8_register.md
+++ b/md/kr/tutorial/8_register.md
@@ -1,20 +1,39 @@
-# 레지스터
+# Register - 값 변경 연동
-읽기 전...
-> 모듈 설정시 `#!ts .Init()` 처럼 QuadId 란을 비워두는 경우 `#!ts Store.GetStore` 가 코드를 넘어 공유되지 않습니다
-> 하지만 `#!ts .Init("Project1")` 처럼 아이디를 부여하는 경우 **다른 모듈, 로컬스크립트가 접근하더라도 같은 QuadId 를 가졌다면 `#!ts Store.GetStore` 는 공유됩니다**
+???+ info "읽기 전..."
+ 모듈 설정시 `#!ts .Init()` 처럼 QuadId 란을 비워두는 경우 `#!ts Store.GetStore` 가 코드를 넘어 공유되지 않습니다
+ 하지만 `#!ts .Init("Project1")` 처럼 아이디를 부여하는 경우 **다른 모듈, 로컬스크립트가 접근하더라도 같은 QuadId 를 가졌다면 `#!ts Store.GetStore` 는 공유됩니다**
-레지스터는 한 값이 변경될 때, 그 값을 사용한 곳이 업데이트 될 수 있도록 만들어주는 Quad 의 주요 기술입니다. 추후 설명될 `Class.Extend` 와도 사용이 가능합니다.
+---
+
+## 레지스터
+
+레지스터는 한 값이 변경될 때, 그 값을 사용한 곳이 업데이트 될 수 있도록 만들어주는 ==Quad 의 주요 기술입니다.== 추후 설명될 `Class.Extend` 와도 같이 사용됩니다.
레지스터는 이러한 시나리오에서 사용될 수 있습니다.
-1. UI 의 여러 오브젝트를 한번에 페이드 아웃 혹은 페이드 인 시키는 경우.
-2. 가변 크기의 UI 를 업데이트 시키는 경우.
-3. 여러 오브젝트들을 한꺼번에 트윈시키는 경우.
-4. 다크테마/화이트테마 변경할 수 있게 만드는 경우.
+
+> 1. UI 의 여러 오브젝트를 한번에 페이드 아웃 혹은 페이드 인 시키는 경우.
+> 2. 가변 크기의 UI 를 업데이트 시키는 경우.
+> 3. 여러 오브젝트들을 한꺼번에 트윈시키는 경우.
+> 4. 다크테마/화이트테마 변경할 수 있게 만드는 경우.
이외에도 레지스터의 활용 방법은 무궁무진합니다. 레지스터의 사용법은 다음과 같습니다.
+```lua
+local myStore = Store.GetStore("myStore")
+myStore.color = Color3.fromRGB(255,255,255)
+Frame { BackgroundColor3 = myStore "color" }
+-- 연동된 프레임도 업데이트 됩니다
+myStore.color = Color3.fromRGB(0,0,0)
+```
+
+> 1. 스토어를 생성함.
+> 2. 기본 값을 설정함.
+> 3. 스토어를 호출해 레지스터를 얻어 등록함.
+
+예시 코드로 정확하게 확인해 볼 수 있습니다
+
```lua
local ScreenGUI = script.Parent
local Quad = require(path.to.module).Init()
@@ -29,19 +48,26 @@ local myStore = Store.GetStore("myStore")
local TextLabel = Class "TextLabel"
myStore.Text = "0 초 지남"
+myStore.Color = Color3.fromRGB(255,100,255)
TextLabel "mainLabel" {
Size = UDim2.fromOffset(100,200);
-- myStore 의 Text 값이 변경됨을 추적하고, Text 값을
-- 업데이트 시킵니다.
Text = myStore "Text";
+
+ -- 이것은 레지스터를 사용하는것이 아니라 단순히 값만
+ -- 불러와 넣어주는 것입니다. 자동 업데이트가 가능하지 않습니다.
+ BackgroundColor3 = myStore.Color;
}
Mount(ScreenGUI, Store.GetObject("mainLabel"))
-local Count = 0
-while true do
- task.wait(1)
+-- 바꾸더라도 레지스터를 사용하지 않아 반영되지 않습니다
+myStore.Color = Color3.fromRGB(255,255,255)
+
+local Count = 1
+while task.wait(1) do
-- 값을 업데이트 합니다. 텍스트 라벨도
-- 자동적으로 업데이트 됩니다.
myStore.Text = Count .. " 초 지남"
@@ -49,6 +75,10 @@ while true do
end
```
+---
+
+## 레지스터 메소드
+
레지스터에는 여러가지 메소드가 담겨있습니다. 이 메소드를 사용하면 레지스터를 보다 더 다양하게 활용할 수 있습니다.
{!include/register.md!}
diff --git a/md/kr/tutorial/9_lang.md b/md/kr/tutorial/9_lang.md
index 62f764a..8a9c307 100644
--- a/md/kr/tutorial/9_lang.md
+++ b/md/kr/tutorial/9_lang.md
@@ -1,6 +1,69 @@
# 언어관리
-Quad 에는 귀찮은 언어관리를 자동으로 해주는 모듈이 내장되어 있습니다.
-또한, register 와 연동해 변하는 텍스트도 알아서 언어에 맞게 출력되도록 만들 수 있습니다.
+???+ info "읽기 전..."
+ 모듈 설정시 `#!ts .Init()` 처럼 QuadId 란을 비워두는 경우 `Lang` 기능이 코드를 넘어 공유되지 않습니다
+ 하지만 `#!ts .Init("Project1")` 처럼 아이디를 부여하는 경우 **다른 모듈, 로컬스크립트가 접근하더라도 같은 QuadId 를 가졌다면 `Lang` 은 공유됩니다**
+---
+
+## 언어관리
+
+Quad 에는 귀찮은 언어관리를 자동으로 해주는 기능이 내장되어 있습니다.
+이 기능은 register 와 연동해 적은 줄의 코드로 변하는 텍스트도 언어에 맞게 출력되도록 만들 수 있습니다.
+
+```lua
+local ScreenGUI = script.Parent
+local Quad = require(path.to.module).Init()
+local Store = Quad.Store
+local Mount = Quad.Mount
+local Event = Quad.Event
+local Lang = Quad.Lang
+local Class = Quad.Class
+
+local TextButton = Class "TextButton"
+
+local myStore = Store.GetStore("myStore")
+myStore.count = 0
+
+Lang.New("TimePassed",{
+ [Lang.Locales.Korean] = "{count}초 지났어요";
+ [Lang.Locales.Default] = function (options)
+ -- 함수 또한 등록할 수 있습니다.
+ if options.count > 1 then
+ return ("%d seconds passed"):format(options.count)
+ else
+ return ("%d second passed"):format(options.count)
+ end
+ end;
+})
+
+TextButton "mainButton" {
+ Size = UDim2.fromOffset(100,100);
+ Text = Lang "TimePassed" {
+ -- count = 1 일반적인 값도 사용가능합니다
+ count = myStore "count";
+ };
+ [Event "MouseButton1Click"] = function()
+ -- 클릭시 언어가 변경됩니다
+ if Lang.CurrentLocale == Lang.Locales.Default then
+ Lang.CurrentLocale = Lang.Locales.Korean
+ else
+ Lang.CurrentLocale = Lang.Locales.Default
+ end
+ end
+}
+Mount(ScreenGUIk,Store.GetObject("mainButton"))
+
+while task.wait(1) do
+ myStore.count = myStore.count + 1
+end
+```
+
+---
+
+## Locale 목록
+
+로케일 값들은 `#!ts Lang.Locales`에서 가져올 수 있으며, 사용가능한 로케일 목록은 다음과 같습니다.
+
+> {!include/locales.md!}
diff --git a/mkdocs_en.yml b/mkdocs_en.yml
index 0589ee8..6bfe478 100644
--- a/mkdocs_en.yml
+++ b/mkdocs_en.yml
@@ -7,29 +7,11 @@ copyright: Copyright © 2020 - 2023 Qwreey
# 사이드바
nav:
- - 홈:
- - 'index.md'
- - 라이선스: 'license.md'
- - 변경사항: 'changelogs.md'
- - 갤러리: 'gallery.md'
- - 튜토리얼:
- - tutorial/index.md
- - Import: 'tutorial/1_import.md'
- - Mount: 'tutorial/2_mount.md'
- - GetObject: 'tutorial/3_getObject.md'
- - Style: 'tutorial/4_style.md'
- - Event: 'tutorial/5_event.md'
- - Tween: 'tutorial/6_tween.md'
- - QuadProperty: 'tutorial/7_quadProperty.md'
- - Register: 'tutorial/8_register.md'
- - Lang: 'tutorial/9_lang.md'
- - Signal: 'tutorial/10_signal.md'
- - Extend: 'tutorial/11_extend.md'
- - 레퍼런스:
- - 'reference/index.md'
+ 'index.md'
# 다중 언어 설정
extra:
+ # 다중 언어 설정
alternate:
- name: 한국어
link: /kr/
@@ -37,9 +19,16 @@ extra:
- name: English
link: /en/
lang: en
+ # 소셜 링크
+ social:
+ - icon: fontawesome/brands/github
+ link: https://github.com/qwreey75
+ - icon: fontawesome/brands/mastodon
+ link: https://stella.place/@qwreey
+
# 리포 설정
-repo_url: https://github.com/qwreey75/quad
+repo_url: https://github.com/qwreey75/Quad
repo_name: Quad
remote_branch: master
@@ -76,10 +65,11 @@ theme:
# 세부기능 Flag
features:
- navigation.indexes
- - navigation.footer
- - navigation.tabs
- - navigation.top
- # - toc.integrate # 목차를 네비게이션에 합치기
+ - navigation.footer # 바닥에 다음글 표시
+ - navigation.tabs # 최상위 nav 인덱스를 탭으로 이동
+ - navigation.top # 맨 위로 올라가기 표시
+ - toc.integrate # 목차를 네비게이션에 합치기
+ - content.code.copy # 코드 복사버튼
# 결과 없음 페이지
static_templates:
@@ -118,6 +108,7 @@ markdown_extensions:
- pymdownx.magiclink # 링크 확장기
- pymdownx.inlinehilite # 인라인 코드 하이라이팅
- pymdownx.mark # 마킹(형광마커 효과)
+ - md_in_html # div 같은거 안에 마크다운 작성
- pymdownx.highlight: # 코드 구문강조
linenums: true # 코드라인 넘버
- pymdownx.emoji: # 이모지 불러오기
diff --git a/mkdocs_kr.yml b/mkdocs_kr.yml
index e049642..8678869 100644
--- a/mkdocs_kr.yml
+++ b/mkdocs_kr.yml
@@ -28,8 +28,8 @@ nav:
- 레퍼런스:
- 'reference/index.md'
-# 다중 언어 설정
extra:
+ # 다중 언어 설정
alternate:
- name: 한국어
link: /kr/
@@ -37,9 +37,15 @@ extra:
- name: English
link: /en/
lang: en
+ # 소셜 링크
+ social:
+ - icon: fontawesome/brands/github
+ link: https://github.com/qwreey75
+ - icon: fontawesome/brands/mastodon
+ link: https://stella.place/@qwreey
# 리포 설정
-repo_url: https://github.com/qwreey75/quad
+repo_url: https://github.com/qwreey75/Quad
repo_name: Quad
remote_branch: master
@@ -76,10 +82,11 @@ theme:
# 세부기능 Flag
features:
- navigation.indexes
- - navigation.footer
- - navigation.tabs
- - navigation.top
- # - toc.integrate # 목차를 네비게이션에 합치기
+ - navigation.footer # 바닥에 다음글 표시
+ - navigation.tabs # 최상위 nav 인덱스를 탭으로 이동
+ - navigation.top # 맨 위로 올라가기 표시
+ - toc.integrate # 목차를 네비게이션에 합치기
+ - content.code.copy # 코드 복사버튼
# 결과 없음 페이지
static_templates:
@@ -118,6 +125,7 @@ markdown_extensions:
- pymdownx.magiclink # 링크 확장기
- pymdownx.inlinehilite # 인라인 코드 하이라이팅
- pymdownx.mark # 마킹(형광마커 효과)
+ - md_in_html # div 같은거 안에 마크다운 작성
- pymdownx.highlight: # 코드 구문강조
linenums: true # 코드라인 넘버
- pymdownx.emoji: # 이모지 불러오기
diff --git a/src/class.lua b/src/class.lua
index 05b7f8c..35a80b0 100644
--- a/src/class.lua
+++ b/src/class.lua
@@ -19,7 +19,7 @@ function module.init(shared)
local storeNew = store.New
local mount = shared.Mount ---@type quad_module_mount
local getHolder = mount.GetHolder
- local mountfunc = mount.Mount
+ local mountfunc = mount.MountOne
local style = shared.Style ---@type quad_module_style
local styleList = style.Styles
local parseStyles = style.ParseStyles
@@ -173,18 +173,18 @@ function module.init(shared)
if not advancedTween then
return warn "[QUAD] module 'AdvancedTween' needs to be loaded for tween properties but it is not found on 'src.libs'. you should adding that to src.libs directory"
end
- local ended, onStepped
- if tween.Ended then
- ended = function (...)
- tween.Ended(item,...)
- end
- end
- if tween.OnStepped then
- onStepped = function (...)
- tween.OnStepped(item,...)
- end
- end
- advancedTween.RunTween(item,tween,{[index] = setValue},ended,onStepped,SetProperty,GetProperty)
+ -- local ended, onStepped
+ -- if tween.Ended then
+ -- ended = function (...)
+ -- tween.Ended(item,...)
+ -- end
+ -- end
+ -- if tween.OnStepped then
+ -- onStepped = function (...)
+ -- tween.OnStepped(item,...)
+ -- end
+ -- end
+ advancedTween.RunTween(item,tween,{[index] = setValue},nil,nil,SetProperty,GetProperty)
else
SetProperty(item,index,setValue,className)
end
@@ -215,7 +215,10 @@ function module.init(shared)
end
elseif indexType == "number" and valueType ~= "boolean" then -- object
-- child object
- mountfunc(item,((iprop == 1) and value or value:Clone()),holder)
+ if iprop ~= 1 then
+ value = value:Clone()
+ end
+ mountfunc(item,value,holder,true)
end
end
diff --git a/src/libs/AdvancedTween/init.lua b/src/libs/AdvancedTween/init.lua
index 443c4ed..39004d0 100644
--- a/src/libs/AdvancedTween/init.lua
+++ b/src/libs/AdvancedTween/init.lua
@@ -62,10 +62,8 @@ module.EasingDirections = {
InOut = "InOut"; -- 두 방향 모두 가감속
}
----@deprecated
-module.EasingDirection = module.EasingDirections
----@deprecated
-module.EasingFunction = module.EasingFunctions
+module.Directions = module.EasingDirections
+module.Easings = module.EasingFunctions
------------------------------------
-- Lerp 함수
@@ -336,7 +334,7 @@ function module.RunTween(Item,Data,Properties,Ended,OnStepped,Setter,Getter,_)
remove(BindedFunctions,find(BindedFunctions,Step))
Index = 1
if Ended then
- Ended(Item)
+ Ended(Item,1,1)
end
end
@@ -347,7 +345,7 @@ function module.RunTween(Item,Data,Properties,Ended,OnStepped,Setter,Getter,_)
Fnc(Item,Index,Alpha)
else
local num = tonumber(FncIndex)
- if num and num <= Index then
+ if num and num <= Alpha then
Fnc(Alpha,Index,Item)
CallBack[FncIndex] = nil
end
diff --git a/src/mount.lua b/src/mount.lua
index a652c2f..7ea2e53 100644
--- a/src/mount.lua
+++ b/src/mount.lua
@@ -38,7 +38,7 @@ function module.init(shared)
end
-- mount function
- local function mount(to,this,holder)
+ local function mount(to,this,holder,noReturn)
local thisObject = this
if type(this) == "table" then
thisObject = rawget(this,"__object")
@@ -68,6 +68,7 @@ function module.init(shared)
end
insert(child,this)
end
+ if noReturn then return end
return setmetatable({to = to,this = this},mountClass)
end
new.MountOne = mount
diff --git a/src/types.lua b/src/types.lua
index 4ca5701..7356996 100644
--- a/src/types.lua
+++ b/src/types.lua
@@ -122,7 +122,7 @@ export type mounts = mount & {
Add: (self:mount,...DOM|any)->();
}
export type module_mount = {
- MountOne: (to:DOM|any,object:DOM|any,holder:DOM|any?)->mount;
+ MountOne: (to:DOM|any,object:DOM|any,holder:DOM|any?,noReturn:boolean?)->mount;
GetHolder: (item:DOM|any)->any?;
} & (to:DOM|any,object:DOM|any,holder:DOM|any?)->mounts
@@ -132,7 +132,7 @@ export type module_mount = {
export type TweenOnStepped = (Item:DOM|any,Alpha:number,AbsolutePercent:number)->()
export type TweenEnded = (Item:DOM|any)->()
export type TweenSetter = (Item:DOM|any,Property:string,Value:Lerpable)->()
-export type TweenGetter = (Item:DOM|any,Property:string)->()
+export type TweenGetter = (Item:DOM|any,Property:string)->any
export type TweenOptions = {
Easing: "Linear"
|"Quint"
@@ -144,6 +144,7 @@ export type TweenOptions = {
|"Expo"
|"Elastic"
|"Bounce"
+ |"Back"
|"Exp2"
|"Exp4"
|EasingFunction?;
@@ -157,20 +158,21 @@ export type TweenOptions = {
}
export type EasingFunction = {run:(number)->number,[any]:any}
export type EasingFunctions = {
- Linear: EasingFunction; ---직선, Linear. i=x, x=0 ~ 1
- Quint: EasingFunction; ---5제곱, Quint. (^5) i=1-(1-x)^5, x=0 ~ 1
- Quart: EasingFunction; ---4제곱, Quart. (^4) i=1-(1-x)^4, x=0 ~ 1
- Cubic: EasingFunction; ---3제곱, Cubic. (^3) i=1-(1-x)^3, x=0 ~ 1
- Quad: EasingFunction; ---2제곱, Quad. (^2) i=1-(1-x)^2, x=0 ~ 1
- Sin: EasingFunction; ---사인파, Sin. i=sin(x*pi/2), x=0 ~ 1
- Circle: EasingFunction; ---사분원, Circle. i=sqrt(1-(1-x)^2), x=0 ~ 1
- Expo: EasingFunction; ---지수함수, Expo. i=1-2^(-10*x), x=0~1
- Elastic: EasingFunction; ---튀어오름, Elastic.
- Bounce: EasingFunction; ---통통거림, Bounce
+ Linear: EasingFunction; ---직선, Linear. i=x, x=0 to 1
+ Quint: EasingFunction; ---5제곱, Quint. (^5) i=1-(1-x)^5, x=0 to 1
+ Quart: EasingFunction; ---4제곱, Quart. (^4) i=1-(1-x)^4, x=0 to 1
+ Cubic: EasingFunction; ---3제곱, Cubic. (^3) i=1-(1-x)^3, x=0 to 1
+ Quad: EasingFunction; ---2제곱, Quad. (^2) i=1-(1-x)^2, x=0 to 1
+ Sin: EasingFunction; ---사인파, Sin. i=sin(x*pi/2), x=0 to 1
+ Circle: EasingFunction; ---사분원, Circle. i=sqrt(1-(1-x)^2), x=0 to 1
+ Expo: EasingFunction; ---지수함수, Expo. i=1-2^(-10*x), x=0 to 1
+ Elastic: EasingFunction; ---탄성, Elastic.
+ Bounce: EasingFunction; ---튀어오름, Bounce
+ Back: EasingFunction; ---뒤로 움직임, Back
-- Old things
- Exp2: EasingFunction; ---덜 가파른 지수. i=math.exp(x), x=-4 ~ 2
- Exp4: EasingFunction; ---더 가파른 지수. i=math.exp(x), x=-4 ~ 4
+ Exp2: EasingFunction; ---덜 가파른 지수. i=exp(x)/max, x=-4 to 2
+ Exp4: EasingFunction; ---더 가파른 지수. i=exp(x)/max, x=-4 to 4
}
export type EasingDirection = string
export type EasingDirections = {
@@ -182,7 +184,9 @@ export type Lerpable = Color3|UDim|UDim2|number|Vector2|Vector3|CFrame
export type TweenHandler = ()->();
export type module_tween = {
EasingFunctions:EasingFunctions;
+ Easing:EasingFunctions;
EasingDirections:EasingDirections;
+ Directions:EasingDirections;
LerpProperties:
- (item:item&(DOM|any),old:{[string]:Lerpable},new:{[string]:Lerpable},alpha:number,setter:(item:item&(DOM|any),property:string,value:Lerpable)->()?)->();
RunTween: (Item:DOM|any,Option:TweenOptions,Properties:{[string]:Lerpable},Ended:TweenEnded?,OnStepped:TweenOnStepped?,Setter:TweenSetter?,Getter:TweenGetter?)->TweenHandler;
RunTweens: (Items:{[number]:DOM|any},Option:TweenOptions,Properties:{[string]:Lerpable},Ended:TweenEnded?,OnStepped:TweenOnStepped?,Setter:TweenSetter?,Getter:TweenGetter?)->();