{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":[" "]},"docs":[{"location":"","title":"Quad","text":"

\ucc98\uc74c\uc624\uc168\ub098\uc694? \ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c\ub97c \uc77d\uc5b4\ubcf4\uc138\uc694! \ucc98\uc74c\ubd80\ud130 \ucc28\uadfc\ucc28\uadfc Quad \ubaa8\ub4c8\uc744 \uc815\ubcf5\ud560 \uc218 \uc788\uc5b4\uc694

"},{"location":"#_1","title":"\ud29c\ud1a0\ub9ac\uc5bc \ubb38\uc11c \ubaa9\ucc28","text":""},{"location":"#api","title":"API \ub808\ud37c\ub7f0\uc2a4","text":"

class __call, import class extend private ~~make~~

event __call prop created createdSync disconnecter private ~~bind~~

mount __call mount => mountClass|mountsClass class mountClass|mountsClass

store getObject getObjects => objectList addObject class objectList class store

style private ~~parseStyles~~ __call new

tween (from @qwreey75:AdvancedTween)

"},{"location":"#_2","title":"\uc9c4\ud589\uc911\uc774\uac70\ub098 \uac80\ud1a0\uc911","text":""},{"location":"#spring","title":"Spring","text":"

Spring \ubb3c\ub9ac \uacc4\uc0b0\uc744 UI \uc560\ub2c8\uba54\uc774\uc158\uc5d0 \uc801\uc6a9\ud569\ub2c8\ub2e4 WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.

"},{"location":"#quad-debuger","title":"Quad Debuger","text":"

Register \uc758 \uc0c1\ud0dc\uc640 Store \uc758 \uac12, Class \uc758 \ub3d9\uc791 \uc5ec\ubd80 \ub4f1 Quad \uc758 \uc5ec\ub7ec \uc790\uc6d0\uc744 \uae34\ubc00\ud558\uac8c \ub514\ubc84\uadf8\ud569\ub2c8\ub2e4. WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.

"},{"location":"#selection","title":"Selection","text":"

Tab \ud0a4\ub4f1\uc73c\ub85c \ubc84\ud2bc \uc120\ud0dd\ud558\uae30 (... \uac00\ub2a5\ud568?) WIP. \uac80\ud1a0\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.

"},{"location":"#quad-component-studio","title":"Quad Component Studio","text":"

\ub208\uc5d0 \ubcf4\uc774\ub294 \uc6cc\uc9c0\uc6cc\uadf8\uc2dd \ud3b8\uc9d1\uae30\ub97c \uc774\uc6a9\ud574 Quad Class \ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. WIP. \uc544\uc9c1 \uc9c4\ud589\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.

"},{"location":"#quad-webrender","title":"Quad WebRender","text":"

HTML, CSS, JS \ub85c\uc368 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ubcc0\ud615\ud574 \uc2a4\ud29c\ub514\uc624 \uc5c6\uc774 \uac1c\ubc1c\ud558\ub294 \uac00\ubcbc\uc6b4 \uac1c\ubc1c\ubc95\uc785\ub2c8\ub2e4. WIP. \uac80\ud1a0\uc911\uc778 \ud504\ub85c\uc81d\ud2b8.

"},{"location":"changelogs/","title":"\ubc84\uc804 \ubc88\uacbd\uc0ac\ud56d","text":""},{"location":"changelogs/#222","title":"2.22","text":"

\ub354\uc774\uc0c1 Event.Prop \uac00 \ucc98\uc74c \uc0dd\uc131\uc2dc \uc2e4\ud589\ub418\ub294 \uc77c\uc774 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

"},{"location":"changelogs/#221","title":"2.21","text":"

Linker \uac00 \uc774\uc81c \ud074\ub798\uc2a4 \uc548 \ud074\ub798\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ub420 \uc218 \uc788\ub3c4\ub85d \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4.

"},{"location":"changelogs/#220","title":"2.20","text":"

Docments \uac00 \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub9ce\uc740\uc591\uc758 \uc0c8\ub85c\uc6b4 \ud29c\ud1a0\ub9ac\uc5bc\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4. Mkdocs \ud14c\ub9c8\uc640 \uc5ec\ub7ec\uac00\uc9c0 \uc124\uc815\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c Makefile \uc744 \ud1b5\ud574\uc11c rojo build \uc640 mkdocs build \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

"},{"location":"changelogs/#219","title":"2.19","text":"

Linker \uac1d\uccb4\uac00 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c GetPropertyChangedSignal \uc640, self \uc5d0 \ud2b9\uc815 \uc624\ube0c\uc81d\ud2b8 \ud639\uc740 \uc774\ubca4\ud2b8\ub97c \uc5f0\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

"},{"location":"changelogs/#218","title":"2.18","text":"

\uc774\uc81c \ub354\uc774\uc0c1 GC \uc5d0 \uc758\ud574 Store \uc758 Instance \uac12\uc774 \uc190\uc2e4\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4

"},{"location":"changelogs/#217","title":"2.17","text":"

Tween \uc758 CallBack \ub4f1\ub85d \uc2dc \uc8fc\uc5b8\uc9c0\ub294 \ud30c\ub77c\uba54\ud130\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ub354\uc774\uc0c1 ~ \ubb38\uc774 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

"},{"location":"changelogs/#215-breaking-changes","title":"2.15 BREAKING CHANGES","text":"

\uc774\uc81c Lang \uc5d0\uc11c CurrentLocale, FailedMessage \uc744 \ubcc0\uacbd\ud558\uba74 \uc790\ub3d9\uc73c\ub85c \ubcc0\uacbd\uc0ac\ud56d\uc774 \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4. \ub610\ud55c \uc77c\ubd80 \ud544\ub4dc\uc758 \ub124\uc774\ubc0d\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4

"},{"location":"changelogs/#214","title":"2.14","text":"

Lang \ubaa8\ub4c8\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. register \ub97c \uc0ac\uc6a9\ud574 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ub2e4\uc911\uc5b8\uc5b4 \uc9c0\uc6d0\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

"},{"location":"changelogs/#213","title":"2.13","text":"

Signal \ubaa8\ub4c8\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c Class.Extend \uc5d0\uc11c GetPropertyChangedSignal \uacfc EmitPropertyChangedSignal \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

"},{"location":"changelogs/#212","title":"2.12","text":"

Mount \ubc18\ud658 \uac1d\uccb4\uc5d0 Add \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d Mount \uac1d\uccb4\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4

"},{"location":"changelogs/#211","title":"2.11","text":"

Store.GetObjects \uc5d0 \uc774\uc81c & \ubb38\ubc95\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

"},{"location":"changelogs/#29","title":"2.9","text":"

PreloadAsync \ub97c \ud1b5\ud574 \uc774\uc81c round.lua \uc5d0\uc11c \ub77c\uc6b4\ub4dc \uc774\ubbf8\uc9c0\ub97c \ubbf8\ub9ac \ub85c\ub4dc\ud569\ub2c8\ub2e4.

"},{"location":"changelogs/#28","title":"2.8","text":"

\ubc18\ud658 \uad00\ub828 \ucf54\ub4dc\uac00 exports \ub85c \uc774\uc8fc\ub418\uc5c8\uc73c\uba70. init.lua \uc5d0\uc11c\ub294 \uc790\ub3d9\uc801\uc73c\ub85c types \ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.

"},{"location":"changelogs/#27","title":"2.7","text":"

\uc774\uc81c types \ub97c \uc644\uc804\ud788 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc9c1\uc811 \ubd88\ub7ec\uc640 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

"},{"location":"changelogs/#2126-breaking-changes","title":"2.1~2.6 BREAKING CHANGES","text":"

\ubaa8\ub4e0 \ubaa8\ub4c8\uc758 \ud544\ub4dc\uc758 \uc774\ub984\uc774 \ubcc0\uacbd\ub418\uc5c8\uc73c\uba70, \ubaa8\ub4e0 \ud074\ub798\uc2a4\ub4e4\uc774 \uae30\ubcf8\uc801\uc73c\ub85c \ub300\ubb38\uc790 \uc2dc\uc791 \ub124\uc774\ubc0d\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \uba85\uba85\uaddc\uce59\uc744 \ubcc0\uacbd\ud588\uc2b5\ub2c8\ub2e4.

"},{"location":"changelogs/#20","title":"2.0","text":"

\ubc84\uc804 \ud310\uc62c\ub9bc, BREAKING CHANGES \ub97c \uc704\ud574 \ubc84\uc804\uc744 \ud310\uc62c\ub9bc \ud558\uc600\uc2b5\ub2c8\ub2e4.

"},{"location":"license/","title":"\ub77c\uc774\uc120\uc2a4","text":"KoreanEnglish
          qwreeykawaii license v1.3\nCopyright 2023. Qwreey [qwreey75@gmail.com]\n\n\uc774 \ub77c\uc774\uc120\uc2a4\ub294 DBAD \ub77c\uc774\uc120\uc2a4\ub97c \uae30\ubc18\uc73c\ub85c \ud569\ub2c8\ub2e4.\n\ub204\uad6c\ub4e0\uc9c0 \uc774 \ub77c\uc774\uc120\uc2a4 \ubb38\uc11c\uc758 \uc6d0\ubcf8 \ud639\uc740 \uc218\uc815\ubcf8\uc744\n\ubcf5\uc0ac, \ud3b8\uc9d1, \ubc30\ud3ec \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\nqwreeykawaii \ub77c\uc774\uc120\uc2a4\uc758 \ubcf5\uc0ac \ubc30\ud3ec \ubc0f \uc218\uc815\uc5d0\n\uad00\ud55c \uaddc\uc815\uacfc \uc870\uac74.\n\n1. \ub2f9\uc2e0\uc740 \uc774 \uadc0\uc5ec\uc6b4 \ucc3d\uc791\ubb3c\uc744 \uac00\uc9c0\uace0 \uc5b4\ub5a0\ud55c\n\uac83\uc774\ub4e0 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e8, \ubb34\ub840\ud558\uc9c0 \ub9c8\uc138\uc694.\n\ubb34\ub840\ud55c \ud589\ub3d9\uc740 \ud1b5\uc0c1\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\n\n\uac00. \uadc0\uc5ec\uc6b4 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc5b4\ub5a0\ud55c \uac00\uacf5\ub3c4 \uc5c6\uc774\n    \ubcf5\uc81c\ud558\uac70\ub098, \uc774\ub984\ub9cc \ubc14\uafb8\ub294 \uac83\uc740 \ubb34\ub840\ud558\uba70\n    \ub178\uace8\uc801\uc778 \uc800\uc791\uad8c \uce68\ud574\uc785\ub2c8\ub2e4.\n\ub098. \uadc0\uc5ec\uc6b4 \uc774 \ucc3d\uc791\ubb3c\uc5d0 \uc74c\ub780\uc131 \ud639\uc740 \uc720\ud574\ud55c\n    \ucf58\ud150\uce20\ub97c \ud3ec\ud568\uc2dc\ud0a4\ub294 \uac83\uc740 \ubb34\ub840\ud569\ub2c8\ub2e4.\n    \uadc0\uc5ec\uc6b4 \ucf58\ud150\uce20\ub85c \ub2e4\ub978\uc774\ub97c \ud574\uce58\uc9c0 \ub9c8\uc2ed\uc2dc\uc624.\n\n\uadf8\ub7ec\ub098 \uc774\uc5d0\ub9cc \uad6d\ud55c\ub418\ub294\uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4.\n\ubb34\uc5c7\ubcf4\ub2e4\ub3c4, \uadc0\uc5ec\uc6b4 \ud0c0\uc778\uc744 \uc0c1\ucc98\uc8fc\uc9c0 \ub9c8\uc138\uc694.\n\n2. \ub2f9\uc2e0\uc774 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc0ac\uc6a9\ud574 \ub9ce\uc740 \uc774\ub4dd\uc744 \ubcf8\n\uacbd\uc6b0, \uadc0\uc5ec\uc6b4 \ucc3d\uc791\uc790\uc5d0\uac8c \uc0ac\ub791\uc744 \ubc30\ud478\uc138\uc694.\n\uc778\uac04\uc801\uc778 \uc0ac\ub78c\uc740 \uadc0\uc5ec\uc6b4 \uc0ac\ub78c\ub4e4\uc744 \uc678\uba74\ud558\uc9c0\n\uc54a\uc2b5\ub2c8\ub2e4. \ub2f9\uc2e0\uc758 \ucee4\ud53c \ud55c\uc794\uc744 \ub098\ub220\uc8fc\uc138\uc694.\n\n3. \uc774 \ucc3d\uc791\ubb3c\uc740 \uc5b4\ub5a0\ud55c \ubcf4\uc99d \uc5c6\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.\n\uc774 \ucc3d\uc791\ubb3c\uc744 \uc0ac\uc6a9\ud558\ub2e4, \ucc3d\uc791\uc790\uc758 \uadc0\uc5ec\uc6b4\n\uc2e4\uc218\ub85c \uc778\ud574 \ubb34\uc5b8\uac00 \uc798\ubabb\ub418\uc5c8\ub2e4\uba74, \ubb38\uc81c\ub97c \uc9c1\uc811\n\ud574\uacb0\ud558\uc138\uc694. \ubb34\ub840\ud558\uc9c0 \uc54a\uc740 \uc0ac\ub78c\uc740 \uc801\uc5b4\ub3c4\n\uadc0\uc5ec\uc6b4 \ud0c0\uc778\ub4e4\uc744 \ube44\ub09c\ud558\uac70\ub098 \ubaa8\uc695\ud558\uc9c0\ub294 \uc54a\uc73c\uba70\n\uc218\uc815\ubcf8\uc744 \uc81c\ucd9c\ud558\uac70\ub098 \ubc84\uadf8\ub9ac\ud3ec\ud2b8\ub97c \uc81c\ucd9c \ud560\n\uac83\uc785\ub2c8\ub2e4.\n\n4. \ub2f9\uc2e0\uc774 \uc774 \uadc0\uc5ec\uc6b4 \ucc3d\uc791\ubb3c\uc744 \ud65c\uc6a9\ud574 \ub2e4\ub978 \ucc3d\uc791\ubb3c\n\uc744 \ub9cc\ub4e4\uace0 \uc2f6\uc740 \uacbd\uc6b0 \uc801\uc5b4\ub3c4 \uc0ac\uc6a9\ud588\ub2e4\ub294 \uace0\uc9c0\ub294\n\ub0a8\uaca8\uc8fc\uc138\uc694. \uadc0\uc5ec\uc6b4 \ucc3d\uc791\uc790\ub4e4\uc740 \uc790\uc2e0\uc758 \ucc3d\uc791\ubb3c\uc774\n\uc88b\uc740\uacf3\uc5d0 \uc0ac\uc6a9\ub418\uc5c8\uc74c\uc744 \uae30\ubed0\ud560 \uac83\uc785\ub2c8\ub2e4.\n* \uc774\ub294 \uad8c\uace0 \uc0ac\ud56d\uc785\ub2c8\ub2e4. \ud544\uc218\uac00 \uc544\ub2c8\uba70 \ubd88\uac00\ud53c\ud55c\n    \uacbd\uc6b0 \ubb34\uc2dc\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n\n5. \ub7ec\uc2dc\uc544 \uad6d\uc801\uc758 \uc774\ub4e4\uc740 \uc774 \ucc3d\uc791\ubb3c\uc744 \uc601\ub9ac \ubaa9\uc801\uc73c\ub85c\n\uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. - \uc6b0\ub9ac\ub294 \uc804\uc7c1\uc790\uae08\uc744\n\uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uac19\uc740 \uc774\uc720\ub85c\uc368, \uc804\uc7c1\uc774 \uc9c0\uc6d0\ub420 \uc218 \uc788\ub294 \uacf3\uc5d0\uc11c\uc758\n\uc774 \ucc3d\uc791\ubb3c \uc0ac\uc6a9\uc744 \ud5c8\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n
          qwreeykawaii license v1.3\n\nCopyright 2023. Qwreey [qwreey75@gmail.com]\n\nThis license is based on DBAD license.\nEveryone is permitted to copy and distribute\nverbatim or modified copies of this license\ndocument.\n\nTERMS, AND CONDITIONS FOR COPYING,\nDISTRIBUTION, AND MODIFICATION\n\n1. You can do anything with this original work,\nbut don't be rude\n\nIn general, being rude includes below\n\nFirst. Do not copy these cute works without\n        any modification. changing the name\n        only is outright copyright infringement\nSecond. Do not add some harmful or NSFW content.\n        It's very rude and may harm others\n\nBeing rude is not limited to these instances.\nAbove all, don't hurt cute people\n\n2. If you get any benefit or profit from these cute\nworks, Share the love. A polite person may share\nthe love with cute people.\n3. These cute works are provided with no warranty.\nIf something goes wrong due to the creator's cute\nmistake, Fix it yourself. A polite person may\nsubmit the fix or bug report.\n4. If you create something with these works, Leave\nthe original creator's name in your work.\nthe cute creator will be happy if their works are\nused for good.\n* This is a recommendation. Not required.\n5. Russian nationality can not use this creation for\ncommercial purposes. \u2014 We do not support the war.\nSame reason, This creation cannot be used where\nit can support the war.\n
"},{"location":"include/bindable/","title":"Bindable","text":"

:Fire(...any)

\ub4f1\ub85d\ub41c \uc5f0\uacb0\ub4e4\uc744 \uc2e4\ud589\ud558\uace0, Wait \uc744 \ud480\uc5b4\uc90d\ub2c8\ub2e4.

:Wait()->(...any)

Fire \uac00 \ud638\ucd9c\ub420 \ub54c \uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4. Fire \uc5d0 \uc0ac\uc6a9\ub41c \uac12\uc774 \ubc18\ud658\ub429\ub2c8\ub2e4.

:Connect((...any)->())->Connection

Fire \uac00 \ud638\ucd9c \ub420 \ub54c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4. Fire \uc5d0 \uc0ac\uc6a9\ub41c \uac12\uc774 \ud638\ucd9c \uc778\uc790\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc5f0\uacb0\uc744 \ub04a\uc744 \uc218 \uc788\ub3c4\ub85d Connection \uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.

:Once((...any)->())->Connection

Connect \uc640 \uc720\uc0ac\ud558\uc9c0\ub9cc, Fire \uac00 \ud55c\ubc88 \ud638\ucd9c\ub41c \ub4a4 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9d1\ub2c8\ub2e4/

:CheckConnected(func)->boolean

\ud568\uc218\uac00 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.

:DisconnectAll()

\ubaa8\ub4e0 \uc5f0\uacb0\uc744 \ub04a\uc2b5\ub2c8\ub2e4. Wait \uc73c\ub85c \uae30\ub2e4\ub9ac\uace0 \uc788\ub294 \uacf3\uc5d0\ub294 nil \uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

:Destroy()

:DisconnectAll() \ub97c \uc218\ud589\ud55c \ud6c4, \uac1d\uccb4\ub97c \ub354\uc774\uc0c1 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4. id \uac00 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub294\uacbd\uc6b0 \uc800\uc7a5\uc18c\uc5d0\uc11c \ud30c\uae30\ud558\uac8c \ub429\ub2c8\ub2e4.

"},{"location":"include/connection/","title":"Connection","text":"

:Disconnect()

\uc5f0\uacb0\uc744 \ub04a\uc2b5\ub2c8\ub2e4. Fire \uac00 \ud638\ucd9c\ub418\ub354\ub77c\ub3c4 Connect \ud639\uc740 Once \uc5d0 \uc0ac\uc6a9\ub41c \ud568\uc218\uac00 \uc2e4\ud589\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

:Destroy()

:Disconnect() \uc758 \ubcc4\uce6d\uc785\ub2c8\ub2e4.

"},{"location":"include/direction/","title":"Direction","text":"

Out \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.

In \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.

InOut \uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.

"},{"location":"include/disconnecter/","title":"Disconnecter","text":"

:Add(connection:Connection|RBXScriptConnection)

connection\uc744 \ub9ac\uc2a4\ud2b8\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4. \ub098\uc911\uc5d0 :Disconnect\ub97c \ud638\ucd9c\ud558\uba74 \ucd94\uac00\ub41c \uc5f0\uacb0\uc774 \ud30c\uae30\ub429\ub2c8\ub2e4.

:Disconnect()

\ucd94\uac00\ub41c \ubaa8\ub4e0 \uc5f0\uacb0\uc5d0 Disconnect() \ub97c \uc218\ud589\ud569\ub2c8\ub2e4. \uc774 \ud638\ucd9c \ud6c4\uc5d0 \ucd94\uac00\ub41c \uc5f0\uacb0\uc740 \ubaa8\ub450 \uc0ac\ub77c\uc9c0\uba70. \uc774 \uc694\uccad \ud6c4\uc5d0\ub3c4 \ub2e4\uc2dc :Add \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 Disconnecter \ub97c \uc644\uc804\ud788 \uc0ac\uc6a9\ud558\uc9c0 \ubabb\ud558\ub3c4\ub85d \ud558\ub824\uba74 :Destroy \ub97c \ud638\ucd9c\ud558\uc138\uc694

:Destroy()

:Disconnect() \ub97c \uc218\ud589\ud55c \ud6c4, \uac1d\uccb4\ub97c \ub354\uc774\uc0c1 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4. id \uac00 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub294\uacbd\uc6b0 \uc800\uc7a5\uc18c\uc5d0\uc11c \ud30c\uae30\ud558\uac8c \ub429\ub2c8\ub2e4.

"},{"location":"include/easings/","title":"Easings","text":"

\ubaa8\ub4e0 Easing \uc740 \uc5ec\uae30\uc5d0\uc11c \uc9c1\uc811\uc801\uc73c\ub85c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

Linear

\uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615 \ud568\uc218\uc785\ub2c8\ub2e4 i=x, x=0 to 1

Quint

5 \uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. Quart \ubcf4\ub2e4 \uac00\ud30c\ub978 \uac1c\ud615\uc744 \uac00\uc84c\uc2b5\ub2c8\ub2e4 (^5) i=1-(1-x)^5, x=0 to 1

Quart

\ub124\uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. Cubic \ubcf4\ub2e4 \uac00\ud30c\ub978 \uac1c\ud615\uc744 \uac00\uc84c\uc2b5\ub2c8\ub2e4 (^4) i=1-(1-x)^4, x=0 to 1

Cubic

\uc138\uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. Quad \ubcf4\ub2e4 \uac00\ud30c\ub978 \uac1c\ud615\uc744 \uac00\uc84c\uc2b5\ub2c8\ub2e4 (^3) i=1-(1-x)^3, x=0 to 1

Quad

\uc81c\uacf1\uc744 \uc774\uc6a9\ud55c \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. (^2) i=1-(1-x)^2, x=0 to 1

Expo

\uc9c0\uc218\ud615 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. \ub9e4\uc6b0 \uac00\ud30c\ub978 \uac1c\ud615\uc744 \uac00\uc84c\uc2b5\ub2c8\ub2e4. i=1-2^(-10*x), x=0 to 1

Sin

\uc0ac\uc778 \ud30c\ud615 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. i=sin(x*pi/2), x=0 to 1

Circle

\uc0ac\ubd84\uc6d0 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4. i=sqrt(1-(1-x)^2), x=0 to 1

Back

\uc2dc\uc791\uc2dc \ub4a4\ub85c \uc774\ub3d9\uc774 \uc788\ub294 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.

Elastic

\ud0c4\uc131\uc744 \uac00\uc9c0\ub294 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.

Bounce

\ud280\uc5b4\uc624\ub984\uc744 \uac00\uc9c0\ub294 \uac00\uac10\uc18d \ud568\uc218\uc785\ub2c8\ub2e4.

TODO: \uc560\ub2c8\uba54\uc774\uc158 \ubbf8\ub9ac\ubcf4\uae30 \uc601\uc0c1 \ucd94\uac00

"},{"location":"include/events/","title":"Events","text":"

Event(name:string)

\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 \uc774\ubca4\ud2b8\ub4e4\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4, MouseEnter, MouseLeave, MouseButton1Down, MouseButton1Up \ub4f1\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4 \uae30\ubcf8\uc801\uc73c\ub85c \ub85c\ube14\ub85d\uc2a4\uc758 \uae30\ubcf8 \uc774\ubca4\ud2b8\ub4e4\uacfc \ub2e4\ub974\uac8c, \uccab\ubc88\uc9f8 \uc778\uc790\ub85c self \ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

\uc6a9\ubc95\uc608\uc81c - \ubc84\ud2bc\ud074\ub9ad
Frame {\n    [Event \"MouseEnter\"] = function (self)\n        print(self.Name .. \"\uc5d0 \ub9c8\uc6b0\uc2a4\uac00 \uc62c\ub77c\uc654\uc2b5\ub2c8\ub2e4\")\n    end;\n}\n
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal TextButton = Class \"TextButton\"\n\nTextButton \"mainButton\" {\n    Size = UDim2.fromOffset(200,200);\n    [Event \"MouseEnter\"] = function (self)\n        print(\"\ubc84\ud2bc\uc774 \ud074\ub9ad\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n    end;\n}\nMount(ScreenGUI, Store.GetObject(\"mainButton\"))\n

Event.Created

\uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub418\uc5c8\uc744 \ub54c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uc778\uc790\ub85c self \ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

-- \uc6a9\ubc95\nFrame {\n    [Event.Created] = function (self)\n        print(self.Name .. \"\uc774 \uc0dd\uc131\ub418\uc5c8\uc5b4\uc694\")\n    end;\n}\n

\uc8fc\uc758

Event.Created \uac00 \uc2e4\ud589\ub420 \ub54c\ub294 Parent \uac12\uc774 \uc815\ud574\uc9c0\uc9c0 \uc54a\uc558\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. self.Parent \ub294 \uc811\uadfc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4. Class.Extend \uc5d0\uc11c\ub294 AfterRender \ub97c \uc774\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.

Event.CreatedAsync

Event.Created \uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc, \ucf54\ub8e8\ud2f4 \uc548\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4. objectList:EachAsync() \ucc98\ub7fc \ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

-- \uc6a9\ubc95\nFrame {\n    Frame {\n        Name = \"A\";\n        [Event.CreatedAsync] = function (self)\n            -- \uc774 \ud568\uc218\uac00 \ub05d\ub098\uc9c0 \uc54a\ub354\ub77c\ub3c4 \ub2e4\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \uc218 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4\n            task.wait(5)\n        end;\n    };\n    Frame {\n        Name = \"B\";\n        [Event.Created] = function (self)\n            print(self.Name .. \"\uac00 \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n        end;\n    };\n}\n

\uc8fc\uc758

Event.CreatedAsync \uac00 \uc2e4\ud589\ub420 \ub54c\ub294 Parent \uac12\uc774 \uc815\ud574\uc9c0\uc9c0 \uc54a\uc558\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. self.Parent \ub294 \uc811\uadfc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4.

Event.Prop(propertyName:string)

\ud504\ub85c\ud37c\ud2f0 \uac12\uc774 \ubcc0\uacbd\ub428\uc744 \uc5f0\uacb0\ud569\ub2c8\ub2e4.

-- \uc6a9\ubc95\nTextBox {\n    Text = \"\uc544\ubb34\uac70\ub098 \uc785\ub825\ud558\uc138\uc694\";\n    [Event.Prop \"Text\"] = function (self,text)\n        -- \ud3b8\uc758\uc0c1\uc758 \uc774\uc720\ub85c \ubcc0\uacbd\ub41c \uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4\n        print(text)\n    end;\n}\n

"},{"location":"include/extend/","title":"Extend","text":"

self(name:string)

Extend \uba54\uc18c\ub4dc \uc804\uc5ed\uc5d0\uc11c \uc0ac\uc6a9\uac00\ub2a5\ud569\ub2c8\ub2e4. \ub9c1\ucee4\ub97c \ub9cc\ub4e4\uba70, PropertyChangedSignal \ub97c \uc774\uc5b4\uc8fc\uac70\ub098, self \uc5d0 \uc6d0\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \ub123\ub294 \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc790\uc138\ud55c \uc815\ubcf4\ub294 Render \ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694.

REQUIRED :Render(props:valueStore)

\ud654\uba74\uc5d0 \uadf8\ub824\uc9c0\ub294 UI \ub97c \ub9cc\ub4e4\uc5b4\uc9c0\uac8c \ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4. Extend \uac00 \uadf8\ub824\uc9c0\ub824\uba74 \ubb34\uc870\uac74 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4. \uc774 \uc624\ube0c\uc81d\ud2b8\ub97c \uadf8\ub9ac\ub294\ub370 \ub4e4\uc5b4\uac04 \ud504\ub85c\ud37c\ud2f0 \ubaa9\ub85d\uc744 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c \uc90d\ub2c8\ub2e4. \ub808\uc9c0\uc2a4\ud130 \ubb38\ubc95\uc774 \uc0ac\uc6a9\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

=== \uc608\uc81c

\n

```

OPTION AfterRender Getter Setter Update GetPropertyChangedSignal EmitPropertyChangedSignal Unload self() UpdateTriggers

"},{"location":"include/locales/","title":"Locales","text":"

Default (default) English (en_us) Spanish (es_es) French (fr_fr) Indonesian (id_id) Italian (it_it) Japanese (ja_jp) Korean (ko_kr) Russian (ru_ru) Thai (th_th) Turkish (tr_tr) Vietnamese (vi_vn) Portuguese (pt_br) German (de_de) ChineseSimplified (zh_cn) ChineseTraditional (zh_tw) Bulgarian (bg_bg) Bengali (bn_bd) Czech (cs_cz) Danish (da_dk) Greek (el_gr) Estonian (et_ee) Finnish (fi_fi) Hindi (hi_in) Croatian (hr_hr) Hungarian (hu_hu) Georgian (ka_ge) Kazakh (kk_kz) Khmer (km_kh) Lithuanian (lt_lt) Latvian (lv_lv) Malay (ms_my) Burmese (my_mm) Bokmal (nb_no) Dutch (nl_nl) Filipino (fil_ph) Polish (pl_pl) Romanian (ro_ro) Ukrainian (uk_ua) Sinhala (si_lk) Slovak (sk_sk) Slovenian (sl_sl) Albanian (sq_al) Bosnian (bs_ba) Serbian (sr_rs) Swedish (sv_se) Arabic (ar_001)

"},{"location":"include/mounts/","title":"Mounts","text":"

:Unmount()

\uc774\ub807\uac8c \ud558\uba74 \ub9c8\uc6b4\ud2b8\ub41c Instance \ub97c \uc9c0\uc6cc\ubc84\ub9bd\ub2c8\ub2e4. Quad \ub294 \uc548\uc804\ud55c \uba54\ubaa8\ub9ac \uad00\ub9ac\ub97c \uc704\ud574 gc \uc758 \uae30\ub2a5\uc5d0 \uc758\uc874\ud558\ubbc0\ub85c, gc \uc2dc\uac04\ucc28\ub85c \uc778\ud574 Store.GetObject \uc5d0\uc11c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0ac\ub77c\uc9c0\ub294\ub370 \uc2dc\uac04\uc774 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui,mainFrame)\n\nlocal childFrame = Frame {}\nlocal childFrameMount = Mount(mainFrame,childFrame)\nchildFrameMount:Unmount()\n-- childFrame \uc740 \ub2e8\uc21c\ud788 .Parent = nil \ub418\ub294 \uac83\uc744 \ub118\uc5b4 \uba54\ubaa8\ub9ac\uc5d0\uc11c \uc0ac\ub77c\uc9d1\ub2c8\ub2e4\n-- \uc989, Destroy() \uac00 \ud638\ucd9c\ub429\ub2c8\ub2e4\n

:Add(item:any)

Mount \uc5d0 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ucc98\uc74c \uc124\uc815\ud55c to \uac12\uc744 \ub530\ub77c \ubd80\ubaa8\uac00 \uacb0\uc815\ub429\ub2c8\ub2e4.

\uc774 \ub3d9\uc791\uc740 \ub9ac\uc2a4\ud2b8\ub97c \ub9cc\ub4e4 \ub54c \uc720\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc\ub85c\ub4dc \ub3d9\uc791\uc2dc \uc9c1\uc811 \uc81c\uac70\uac00 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui, mainFrame)\n\nlocal lastListMount = Mount(mainFrame)\nlocal function refreshList()\n    lastListMount:Unmount() -- \uc774\uc804 children \uc744 \uc54c\uc544\uc11c \uc81c\uac70\ud569\ub2c8\ub2e4\n    for i = 1,10 do\n        lastListMount:Add(Frame { Name = tostring(i) })\n    end\nend\n\ntask.spawn(function()\n    while true do\n        refreshList()\n        task.wait(2)\n    end\nend)\n

\ub2e4\uc74c\uacfc \uac19\uc774 \uc774\uc804 children \uc744 \uac04\uc811\uc801\uc73c\ub85c \uc81c\uac70\ud558\uace0 \uc0c8\ub85c\uc6b4 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e8 ScrollFrame \uc758 \uacbd\uc6b0 CanvasPosition\uc774 \ucd08\uae30\ud654 \ub418\uc5b4\ubc84\ub9ac\ubbc0\ub85c \uc790\uc2dd\ub4e4\uc744 :Unmount() \ud558\uae30 \uc804\uc5d0 \uc704\uce58\ub97c \uc800\uc7a5\ud558\uace0 \ub2e4\uc2dc \ubd88\ub7ec\uc640\uc57c \ud569\ub2c8\ub2e4

"},{"location":"include/objectList/","title":"objectList","text":"

:Each((item:any, index:number)->())

\uc77c\ubc18\uc801\uc778 \ubc18\ubcf5\uc785\ub2c8\ub2e4. for \ub97c \uc0ac\uc6a9\ud558\ub294\uac83\uacfc \ud6a8\uacfc\uac00 \uac19\uc73c\ub098 \ud568\uc218\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4

:EachAsync((item:any, index:number)->())

\ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uace0 \ubc14\ub85c\ubc14\ub85c \ub2e4\uc74c \uc544\uc774\ud15c\uc73c\ub85c \ub118\uc5b4\uac11\ub2c8\ub2e4. \ucf54\ub8e8\ud2f4\uc774 \uc774\uc6a9\ub429\ub2c8\ub2e4. wrap() \ucf54\ub8e8\ud2f4\uc744 \ubaa8\ub974\uac70\ub098, \ud544\uc694\uc131\uc774 \uc5c6\ub294\uacbd\uc6b0 \uc77c\ubc18\uc801\uc73c\ub85c :Each \ub97c \uc0ac\uc6a9\ud574\ub3c4 \ub429\ub2c8\ub2e4

:IsEmpty()

\uc774 ObjectList \uac00 \ube44\uc5b4\uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.

:Remove(indexOrItem:number|any)

objectList \uc5d0\uc11c \ud574\ub2f9\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4. , & \ub97c \uc0ac\uc6a9\ud55c \uace0\uae09 \uac80\uc0c9\uc5d0\uc11c\ub294 \uc791\ub3d9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4

"},{"location":"include/quadProperty/","title":"quadProperty","text":"

RoundSize:number?

ImageLabel, ImageButton \uc5d0\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc18d\uc131\uc785\ub2c8\ub2e4. \uc6d0\ud615 \uc774\ubbf8\uc9c0\uc5d0 Slice\ub97c \uc774\uc6a9\ud574 \ub465\uadfc \ud504\ub808\uc784\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c UICorner\ubcf4\ub2e4 \ubd80\ub4dc\ub7ec\uc6b4 \ucf54\ub108\ud6a8\uacfc\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.

Corner:number?

\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 UI\uc624\ube0c\uc81d\ud2b8\uc5d0 \uc801\uc6a9\ub429\ub2c8\ub2e4. UICorner\ub97c \uc774\uc6a9\ud574 \ubaa8\uc11c\ub9ac \ubd80\ubd84\uc744 \ub465\uae00\uac8c \ub9cc\ub4ed\ub2c8\ub2e4. \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

PaddingAll:UDim?

UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. \uc0c1\ud558\uc88c\uc6b0 \ubaa8\ub450 \uac19\uc740 \uac12\uc73c\ub85c \uc801\uc6a9\ub429\ub2c8\ub2e4. PaddingAllOffset \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

PaddingAllOffset:number?

UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. PaddingAll\uacfc \uac19\uc740 \ubc29\ubc95\uc73c\ub85c \uc791\ub3d9\ud558\ub098, Offset\uac12\ub9cc \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. PaddingAll \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Scale:number?

UIScale\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. UIScale.Scale \uacfc \uac19\uc740 \ud6a8\uacfc\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4

"},{"location":"include/register/","title":"Register","text":"

register \ud2b9\uc218 \uba54\uc18c\ub4dc\uac00 \uc801\uc6a9\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.

:Add(value:any)->register

\uac12\uc5d0 \ub354\ud558\uae30\ub97c \ucde8\ud569\ub2c8\ub2e4. \uc74c\uc218\ud615\ud0dc\uac00 \uc81c\uacf5\ub418\ub294 \uacbd\uc6b0 \ube7c\uae30 \ucc98\ub7fc \uc791\ub3d9\ud569\ub2c8\ub2e4. number, Udim, UDim2, Color3, Vector2 \ub4f1 \ub354\ud560 \uc218 \uc788\ub294 \ubaa8\ub4e0\uac83\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.pos = UDim2.fromOffset(100,0)\n\nFrame \"mainFrame\" {\n    Position = myStore \"pos\":Add(UDim2.fromOffset(0,100));\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile true do\n    myStore.pos = myStore.pos + UDim2.fromOffset(10,0)\n    task.wait(2)\nend\n

\uc8fc\uc758

\uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4

:With((store:valueStore, newValue:any, key:string)->())->register

\ud568\uc218 \ub610\ub294 \ud14c\uc774\ube14\uc5d0\uc11c \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4. Add \ubcf4\ub2e4 \ub098\uc911\uc5d0 \uc218\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4

\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \ud568\uc218\uc608\uc81c - \ud14c\uc774\ube14
myStore \"size\":With(function (_,value)\n    return value * 2\nend)\n

width \uac12\uc5d0 \ub9de\ucdb0 \uc790\ub3d9\uc73c\ub85c UI \uac00 \uc5c5\ub370\uc774\ud2b8\ub418\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.topbarSize = 60\nmyStore.width = 200\n\n-- \ub808\uc9c0\uc2a4\ud130\ub97c \ubcc0\uc218\ub85c \ub450\uace0 \uc0ac\uc6a9\ud569\ub2c8\ub2e4\nlocal listItemSize = myStore \"width\":With(function()\n    return UDim2.fromOffset(myStore.width,60)\nend)\n\nFrame \"mainFrame\" {\n    Class \"UIListLayout\" { SortOrder = Enum.SortOrder.LayoutOrder };\n\n    -- \uc0ac\uc774\uc988\uac00 width \uc5d0 \ub9de\uac8c \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4\n    Size = myStore \"width\":With(function ()\n        return UDim.fromOffset(store.width,400)\n    end);\n\n    Frame \"Topbar\" {\n        LayoutOrder = 1;\n        BackgroundColor3 = Color3.fromRGB(255,0,0);\n        -- \uc774\ub807\uac8c \uc5ec\ub7ec \uac12\uc744 \ubb36\uc5b4\uc11c \ub450 \uac12\uc774 \ubcc0\uacbd\ub428, \ud639\uc740 \uadf8\uc774\uc0c1\uc744\n        -- \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n        Size = myStore \"topbarSize,width\":With(function()\n            return UDim2.fromOffset(myStore.width,myStore.topbarSize)\n        end);\n    }\n    Frame \"ListItem\" {\n        LayoutOrder = 2;\n        BackgroundColor3 = Color3.fromRGB(0,255,0);\n        Size = listItemSize;\n    };\n    Frame \"ListItem\" {\n        LayoutOrder = 3;\n        BackgroundColor3 = Color3.fromRGB(0,0,255);\n        Size = listItemSize;\n    };\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- width \uac12\uc744 \ubcc0\uacbd\ud574\ubcf4\uc138\uc694\nwhile true do\n    myStore.width = myStore.width + 10\n    task.wait(1)\nend\n

colors \ud14c\uc774\ube14 \uc548\uc5d0 \uc788\ub294 \uc0c9\uae54\ub4e4\uc744 \ub3cc\uc544\uac00\uba70 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nlocal colors = {\n    Color3.fromRGB(255,255,255);\n    Color3.fromRGB(255,255,0);\n    Color3.fromRGB(0,255,255);\n    Color3.fromRGB(255,0,255);\n    Color3.fromRGB(255,0,0);\n    Color3.fromRGB(0,255,0);\n    Color3.fromRGB(0,0,255);\n}\nmyStore.color = 1\n\nFrame \"mainFrame\" {\n    Size = UDim2.fromOffset(200,200);\n    -- colors \uc5d0\uc11c \uc778\ub371\uc2f1\ud574 \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4\n    BackgroundColor3 = myStore \"color\":With(colors);\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- \uc778\ub371\uc2a4\ub97c \uc21c\ud68c\ud569\ub2c8\ub2e4\nwhile task.wait(1) do\n    myStore.color = (i-1)%(#colors)+2\nend\n
\uc8fc\uc758

\uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4

:Tween(options:TweenOptions)->register

\ud2b8\uc708\uc744 \uc774\uc6a9\ud574 \ubcc0\uacbd\uc0ac\ud56d\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4(\ucc98\uc74c \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc74c) \uc635\uc158\uc740 Tween \ubb38\uc11c\uc5d0 \ub098\uc640\uc788\ub294 \uc635\uc158\uacfc \uac19\uc2b5\ub2c8\ub2e4.

\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \ud55c\uaebc\ubc88\uc5d0 \uc774\ub3d9
-- Tween \uc635\uc158\uc744 \ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nmyStore \"size\":Tween{ Time = 2 }\n

\ud504\ub808\uc784\uc744 \ud55c\uaebc\ubc88\uc5d0 \uc6c0\uc9c1\uc785\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\nmyStore.pos = UDim2.fromOffset(50,0)\nStyle \"TweenFrame\" {\n    Size = UDim2.fromOffset(50,50);\n    BackgroundColor3 = Color3.fromRGB(255,100,255);\n}\n\nFrame \"mainFrame\" {\n    BackgroundColor3 = Color3.fromRGB(255,255,255);\n    Size = UDim2.fromOffset(500,500);\n    Frame \"TweenFrame\" {\n        Position = myStore \"pos\":Tween{Time = 2};\n    };\n    Frame \"TweenFrame\" {\n        Position = myStore \"pos\"\n            :Add(UDim2.fromOffset(0,100))\n            :Tween{Time = 2};\n    };\n    Frame \"TweenFrame\" {\n        Position = myStore \"pos\"\n            :Add(UDim2.fromOffset(0,200))\n            :Tween{Time = 2};\n    };\n    Frame \"TweenFrame\" {\n        Position = myStore \"pos\"\n            :Add(UDim2.fromOffset(0,300))\n            :Tween{Time = 2};\n    }\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nlocal on = false\nwhile true do\n    on = not on\n    myStore.pos = on and UDim2.fromOffset(400,0) or UDim2.fromOffset(50,0)\n    task.wait(1.5) -- \ud2b8\uc708\uc740 \ub36e\uc5b4 \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n    -- \ub530\ub77c\uc11c 2 \ucd08\uc778 \uae38\uc774\ubcf4\ub2e4 \ub354 \ube68\ub9ac \ubc14\uafd4\ub3c4 \uc624\ub958\uac00 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\nend\n
\uc8fc\uc758

\uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4

:Default(value:any)->register

\uae30\ubcf8\uac12\uc744 \uc815\ud569\ub2c8\ub2e4. \ub9cc\uc57d \uac12\uc774 nil \uc778 \uacbd\uc6b0 \uc774 \uac12\uc744 \uc0ac\uc6a9\ud558\uac8c \ub429\ub2c8\ub2e4. Add \ub098 With \ub4f1 \ub2e4\ub978\uac83\uc5d0 \uc601\ud5a5\ubc1b\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nFrame \"mainFrame\" {\n    Size = UDim2.fromOffset(200,200);\n    -- color \uac12\uc774 \uc5c6\uc73c\ubbc0\ub85c Default \uc548\uc758 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.\n    BackgroundColor3 = myStore \"color\"\n        :Default(Color3.fromRGB(255,0,0));\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\ntask.wait(5)\nmyStore.color = Color3.fromRGB(0,255,0)\n

\uc8fc\uc758

:Register(<INPUT>(store:valueStore, newValue:any, key:string)->())->INPUT

\ub808\uc9c0\uc2a4\ud130\uc5d0 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4. \uac12\uc774 \ubcc0\uacbd\ub418\uba74 \ud568\uc218\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4

newValue \uc5d0\ub294 :Add, :With, :Tween, :Default \uac00 \ub530\ub85c \uacc4\uc0b0\ub418\uc9c0 \uc54a\uc73c\uba70, \uc124\uc815\ub41c \uac12\uc744 \uc544\ubb34 \uac00\uacf5 \uc5c6\uc774 \uc81c\uacf5\ud569\ub2c8\ub2e4

\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \uc5ec\ub7ec \ubcc0\uacbd\uc0ac\ud56d \ucd94\uc801
myStore.test = 1\n-- \ubc18\ud658 \uac12\uc740 \uc785\ub825\uc73c\ub85c \ub123\uc740 \ud568\uc218\uc785\ub2c8\ub2e4. !\uaf2d \uc800\uc7a5\ud574\uc57c\ud569\ub2c8\ub2e4\n-- :Register \ub294 \ud568\uc218\uac00 \uc0ac\ub77c\uc9c0\uc9c0 \uc54a\ub3c4\ub85d \uac12\uc744 \uc720\uc9c0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\n-- \ub9cc\uc57d \ubc84\ub9b4 \uacbd\uc6b0 \uc77c\uc815 \uc2dc\uac04 \ub4a4 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nlocal func = myStore \"test\":Register(function(_,newValue)\n    -- \uac12 \ubcc0\uacbd\uc2dc \ucd9c\ub825\ub429\ub2c8\ub2e4\n    print(newValue)\nend)\nmyStore.test = 2\n

myStore.test1, myStore.test2 \uac00 \ubcc0\ud654\ud558\uba74 print \ud568\uc218\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\n\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.test1 = 1\nmyStore.test2 = \"Hello\"\n\nlocal func = myStore \"test1,test2\":Register(function()\n    print(myStore.test1,myStore.test2)\nend)\n\nmyStore.test1 = 2\n
\uc8fc\uc758

Register \uc548\uc5d0 \ub4e4\uc5b4\uac04 \ud568\uc218\ub294 GC \uc548\uc815\uc131\uc744 \uc704\ud574\uc11c \uc57d\ud55c \ucc38\uc870\ub85c \uc800\uc7a5\ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c \ud568\uc218\ub97c \uc800\uc7a5\ud574\uc57c\ud569\ub2c8\ub2e4.

"},{"location":"include/tweenOptions/","title":"tweenOptions","text":"

OPTION Time:number?

\ud2b8\uc708\uc758 \ucd1d \uae38\uc774\ub97c \uc815\ud569\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 1\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

OPTION Easing:string|(index:number)->number?

\ud2b8\uc708\uc758 \uac00\uac10\uc18d \uc815\ub3c4\ub97c \uacb0\uc815\ud569\ub2c8\ub2e4. \ubb38\uc790\uc5f4 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uac70\ub098, Tween.Easings.Linear\uc640 \uac19\uc774 \uc5f4\uac70\ud615 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud639\uc740 \ud544\uc694\uc5d0 \ub530\ub77c \ud568\uc218\ub97c \uc9c0\uc815\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ud568\uc218\ub97c Easing \uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c 1\ucc28 \uc9c4\ud589\ub3c4 (Linear, 0 \uc5d0\uc11c 1 \uc0ac\uc774\uc758 \uac12) \uac12\uc774 \uc8fc\uc5b4\uc9c0\uba70, \uacc4\uc0b0 \uacb0\uacfc\ub85c \uc2e4\uc81c \uc801\uc6a9\ub420 \uc704\uce58\ub97c \ubc18\ud658\ud574\uc57c\ud569\ub2c8\ub2e4. \ubc18\ud658\uac12\uc740 \uc74c\uc218\uc774\uac70\ub098 1 \ubcf4\ub2e4 \ud074 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 Exp2\uac00 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

type Easing =\n\"Linear\" // \uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615\n|\"Quint\" // 5 \uc81c\uacf1\n|\"Quart\" // \ub124\uc81c\uacf1\n|\"Cubic\" // \uc138\uc81c\uacf1\n|\"Quad\" // \uc81c\uacf1\n|\"Sin\" // \uc0ac\uc778 \ud30c\ud615\n|\"Circle\" // \uc0ac\ubd84\uc6d0\n|\"Expo\" // \uc9c0\uc218\ud615\n|\"Elastic\" // \ud0c4\uc131\n|\"Bounce\" // \ud280\uc5b4\uc624\ub984\n|\"Back\" // \ub4a4\ub85c \uac00\uac10\uc18d\n|\"Exp2\" // \ub35c \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 to 2\n|\"Exp4\" // \ub354 \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 ~ 4\n|EasingFunction?;\n
\ud568\uc218\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \uc124\uba85\uacfc \ubbf8\ub9ac\ubcf4\uae30\ub294 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694

OPTION Direction:string?

\ud2b8\uc708\uc774 \uc9c4\ud589\ub418\ub294 \ubc29\ud5a5\uc785\ub2c8\ub2e4. \ubb38\uc790\uc5f4 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uac70\ub098, Tween.Directions.Out\uacfc \uac19\uc774 \uc5f4\uac70\ud615 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 Out\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

type Direction =\n// \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.\n\"Out\"\n// \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.\n|\"In\"\n//\uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.\n|\"InOut\"\n
\ubc29\ud5a5\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \uc124\uba85\uacfc \ubbf8\ub9ac\ubcf4\uae30\ub294 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694

OPTION CallBack:{[number|\"*\"|string]:(Item:any, Alpha:number, AbsolutePercent:number)->()}?

\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uc2e4\ud589\uc911\uc778 \ub3c4\uc911\uc5d0 \ud568\uc218\ub97c \uc2e4\ud589\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud2b8\uc708\uc758 \uc9c4\ud589 \uc815\ub3c4\uc5d0 \ub530\ub77c\uc11c \ud55c\ubc88 \ud568\uc218\uac00 \uc2e4\ud589\ub418\uac70\ub098 \ud2b8\uc708 \uc9c4\ud589\uc911 \uacc4\uc18d\ud574\uc11c \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc778\ub371\uc2a4\uac00 \uc22b\uc790\uc778 \uacbd\uc6b0 \ud574\ub2f9 \uc9c0\uc810\uc744 \ub118\uc744 \ub54c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc73c\uba70, \"*\" \ub97c \uc778\ub371\uc2a4\ub85c \uc0ac\uc6a9\ud558\uba74 \ubaa8\ub4e0 \ubd80\ubd84\uc5d0\uc11c \ud568\uc218\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4. \ud568\uc218\uc5d0\ub294 \ud3b8\uc758\uc0c1 \ud2b8\uc708\uc744 \ud558\uace0\uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \uc704\uce58\uac12, \uc2dc\uac04\ub9cc\uc744 \uace0\ub824\ud55c 1\ucc28 \uc704\uce58\uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.

OPTION OnStepped:(Item:any, Alpha:number, AbsolutePercent:number)->()?

CallBack \uc5d0 \"*\" \ub97c \ub123\uc740\uac83\uacfc \ub3d9\uc77c\ud55c \ud6a8\uacfc\ub97c \uac00\uc9c0\ub294 \ubcc4\uce6d\uc785\ub2c8\ub2e4

OPTION Ended:(Item:any, Alpha:number, AbsolutePercent:number)->()?

CallBack \uc5d0 1\uc744 \ub123\uc740\uac83\uacfc \ub3d9\uc77c\ud55c \ud6a8\uacfc\ub97c \uac00\uc9c0\ub294 \ubcc4\uce6d\uc785\ub2c8\ub2e4

OPTION Getter:(Item:any, Property:string)->any?

\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uac12\uc744 \uc5bb\uc73c\ub824 \ud560 \ub54c \uc0ac\uc6a9\ud560 \ud568\uc218\uc785\ub2c8\ub2e4. \ud568\uc218\uc5d0 \ud2b8\uc708\ud558\uace0 \uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \ud504\ub85c\ud37c\ud2f0 \uc774\ub984\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.

Warning

register:Tween() \uc640 \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

OPTION Getter:(Item:any, Property:string, Value:Lerpable)->any?

\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uac12\uc744 \uc124\uc815\ud558\ub824 \ud560 \ub54c \uc0ac\uc6a9\ud560 \ud568\uc218\uc785\ub2c8\ub2e4. \ud568\uc218\uc5d0 \ud2b8\uc708\ud558\uace0 \uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \ud504\ub85c\ud37c\ud2f0 \uc774\ub984, \uc124\uc815\ud560 \uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.

Warning

register:Tween() \uc640 \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

"},{"location":"include/typeDirection/","title":"typeDirection","text":"
type Direction =\n// \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.\n\"Out\"\n// \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.\n|\"In\"\n//\uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.\n|\"InOut\"\n
"},{"location":"include/typeEasings/","title":"typeEasings","text":"
type Easing =\n\"Linear\" // \uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615\n|\"Quint\" // 5 \uc81c\uacf1\n|\"Quart\" // \ub124\uc81c\uacf1\n|\"Cubic\" // \uc138\uc81c\uacf1\n|\"Quad\" // \uc81c\uacf1\n|\"Sin\" // \uc0ac\uc778 \ud30c\ud615\n|\"Circle\" // \uc0ac\ubd84\uc6d0\n|\"Expo\" // \uc9c0\uc218\ud615\n|\"Elastic\" // \ud0c4\uc131\n|\"Bounce\" // \ud280\uc5b4\uc624\ub984\n|\"Back\" // \ub4a4\ub85c \uac00\uac10\uc18d\n|\"Exp2\" // \ub35c \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 to 2\n|\"Exp4\" // \ub354 \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 ~ 4\n|EasingFunction?;\n
"},{"location":"tutorial/","title":"Getting Started","text":"\uc2e4\ud5d8\uc801\uc778 \ubaa8\ub4c8

\uc774 \ubaa8\ub4c8\uc740

"},{"location":"tutorial/#_1","title":"\uba38\ub9ac\ub9d0","text":"

\uc774 \ud398\uc774\uc9c0\ub294 Quad \ubaa8\ub4c8\uc744 \uc27d\uac8c \uc2dc\uc791\ud560 \uc218 \uc788\ub3c4\ub85d \ud29c\ud1a0\ub9ac\uc5bc\uc744 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud398\uc774\uc9c0\ub97c \uc815\ub3c5\ud574 Quad \ubaa8\ub4c8\uc758 \uc804\ubc18\uc801\uc778 \uc0ac\uc6a9\ubc95\uc744 \ud30c\uc545\ud574\ubcf4\uc138\uc694!

\uc8fc\uc758: \uc774 \ubaa8\ub4c8\uc740 \uac1c\ubc1c \uc9c4\ud589\uc774 \ub9e4\uc6b0 \ube60\ub985\ub2c8\ub2e4. \ub9ce\uc740\uc591\uc758 \ubcc0\uacbd \uc0ac\ud56d\uc774 \uc788\uc744 \uc218 \uc788\uc73c\ubbc0\ub85c github \uc5d0\uc11c \ubcc0\uacbd\uc0ac\ud56d\uc744 \uacc4\uc18d\ud574\uc11c \ucd94\uc801\ud558\uc138\uc694

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

"},{"location":"tutorial/#_2","title":"\uc124\uce58","text":""},{"location":"tutorial/#_3","title":"\ubaa8\ub4c8 \ubd88\ub7ec\uc624\uae30/\ucd08\uae30\ud654","text":"
local Quad = require(path.to.module).Init()\n

\ubaa8\ub4c8\uc744 \uc14b\uc5c5\ud558\uae30 \uc704\ud574\uc11c\ub294 .Init(QuadId:string?) \uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c QuadId \uac12\uc740 \ud544\uc694\ud558\uc9c0 \uc54a\uc9c0\ub9cc, \ub098\uc911\uc5d0 \uc18c\uac1c\ud560 Store \uc640 \uac19\uc740 \uc77c\ubd80 \uae30\ub2a5\ub4e4\uc774 QuadId:string \uc5d0 \uc601\ud5a5\ubc1b\uae30\ub3c4 \ud569\ub2c8\ub2e4.

.Init(QuadId:string) \ud568\uc218\ub294 QuadId \uac00 \uac19\uc740 \ubd88\ub7ec\uc624\uae30\uac00 \uc774\ubbf8 \uc788\uc5c8\ub358 \uacbd\uc6b0, \ucd08\uae30\ud654 \ud558\uc9c0 \uc54a\uace0 \ubd88\ub7ec\uc654\ub358\uac83\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \ubaa8\ub4c8\ub4e4 \ub07c\ub9ac QuadId \uac00 \uac19\uc740 \uacbd\uc6b0 Store \uc640 \uac19\uc740\uac83\uc774 \uacf5\uc720\ub429\ub2c8\ub2e4.

QuadId \uac00 \ube44\uc6cc\uc9c4 \uacbd\uc6b0 \ud55c\ubc88\ub3c4 \uc0dd\uc131\ub41c \uc801 \uc5c6\ub294 \uc0c8\ub85c\uc6b4 Quad \uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n

\ubd88\ub7ec\uc624\uae30\uac00 \ub05d\ub0ac\ub2e4\uba74 \uc774\uc81c Quad \uc758 \uc790\uc6d0\ub4e4\uc744 \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4! \ub2e4\uc74c \ud398\uc774\uc9c0\ub85c \ub118\uc5b4\uac00 \uc5b4\uc11c \ud65c\uc6a9\ud574 \ubd05\uc2dc\ub2e4

"},{"location":"tutorial/#_4","title":"\ud0c0\uc785 \ubd88\ub7ec\uc624\uae30","text":"

\uae30\ubcf8\uc801\uc73c\ub85c \uc774 \ubaa8\ub4c8\uc740 \ub85c\ub4dc\uc2dc \ud0c0\uc785\uc744 \ubc18\ud658\ud558\uc9c0\ub9cc. \uc9c1\uc811\uc801\uc73c\ub85c \ud0c0\uc785\uc744 \uc9c0\uc815\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 types.lua \ub97c \ubd88\ub7ec\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4

local types\n
"},{"location":"tutorial/#_5","title":"\ud14c\uc2a4\ud2b8 \ud658\uacbd \uc900\ube44","text":"

\ud14c\uc2a4\ud2b8 \ud658\uacbd\uc740 rojo \uc640\uc758 \uac1c\ubc1c\ud1b5\ud569\uc744 \uc704\ud574 Play \ubc84\ud2bc\uc744 \ub204\ub974\uc9c0 \uc54a\uace0 \ubbf8\ub9ac\ubcf4\uae30\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4e4\uc5b4\uc90d\ub2c8\ub2e4 \uc774\ub97c \ud1b5\ud574 \ub2e4\ub978 \ucf54\ub4dc \ubc29\uc2dd\uc758 UI \ud504\ub808\uc784 \uc6cc\ud06c\ubcf4\ub2e4 \ube60\ub978 \uac1c\ubc1c\uc18d\ub3c4\ub97c \ub2ec\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

"},{"location":"tutorial/#_6","title":"\uc790\ub3d9 \ub9ac\ub85c\ub4dc","text":"

\uc8fc\uc758: rojo \ud658\uacbd\uc774 \uc544\ub2c8\ub77c\uba74 \uc790\ub3d9 \ub9ac\ub85c\ub4dc\ub294 \ub799\uc744 \ub3d9\ubc18\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

\uc77c\ubc18\uc801\uc73c\ub85c, \ub85c\uceec \ud3b8\uc9d1 \ud658\uacbd\uc5d0\uc11c \ub85c\ube14\ub85d\uc2a4\uc758 script editor \ub294 \ud55c\uae00\uc790 \ud55c\uae00\uc790 \ubcc0\uacbd\uc2dc \ub9c8\ub2e4 .Source \ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4. \uc774\ub294 \uacf3 \ud55c\uae00\uc790 \ud55c\uae00\uc790 \ud0c0\uc774\ud551 \uc2dc \ub9c8\ub2e4 UI \uac00 \uc5c5\ub370\uc774\ud2b8 \ub420 \uc218 \uc788\uc74c\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. Quad \uc758 tracker \ubaa8\ub4c8\uc740 \uc21c\uac04\uc801\uc73c\ub85c \ub9ce\uc740\uc591\uc758 \ub9ac\ub85c\ub4dc\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\ub3c4\ub85d \uc801\uc808\ud55c \ucfe8\ud0c0\uc784\uacfc \uc2dc\uac04\ubd84\ubc30\ub97c \uac00\uc9c0\uace0 \uc788\uc9c0\ub9cc, \uc774 \uacbd\uc6b0\uc5d0\ub3c4 Ctrl+S \ub97c \ub20c\ub7ec \uc800\uc7a5\ud574\uc57c \uc801\uc6a9\ub418\ub294 vscode \uc640 \uac19\uc740 \ud0c0 \ud3b8\uc9d1\uae30\uc640\ub294 \ucc28\uc774\uac00 \ub0a0 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc\uac00 \ucee4\uc9d0\uc73c\ub85c \uc778\ud574 \uc790\ub3d9 \ub9ac\ub85c\ub4dc\uc5d0\uc11c \ud37c\ud3ec\uba3c\uc2a4\uc801 \uc774\uc288\ub97c \uacaa\ub294\ub2e4\uba74, rojo \ub97c \ud65c\uc6a9\ud574 \ucf54\ub4dc\ub97c \uc678\ubd80\ub85c \uc62e\uae34 \ud6c4, vscode \ub97c \uc2a4\ud29c\ub514\uc624 \uc704\uc5d0 \ub193\uace0 \ubbf8\ub9ac\ubcf4\uae30\uc640 \ucf54\ub4dc\ub97c \ub3d9\uc2dc\uc5d0 \ubcf4\uba74\uc11c \ud3b8\uc9d1\ud558\uc138\uc694.

"},{"location":"tutorial/#_7","title":"\uc218\ub3d9 \ub9ac\ub85c\ub4dc","text":""},{"location":"tutorial/10_signal/","title":"Signal - \uc774\ubca4\ud2b8 \uc0dd\uc131\uacfc \uc5f0\uacb0","text":"\uc77d\uae30 \uc804...

\ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Bindable, Disconnecter \uae30\ub2a5\uc774 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Bindable, Disconnecter \ub294 \uacf5\uc720\ub429\ub2c8\ub2e4

Quad \uc5d0\ub294 \ud3b8\uc758\uc0c1\uc758 \uc774\uc720\ub85c \ub85c\ube14\ub85d\uc2a4\uc758 RBXScriptSignal \uc758 \uc720\uc0ac\ud488\uacfc, \ud55c\ubc88\uc5d0 \uc2dc\uadf8\ub110\uc744 \ub04a\uc5b4\uc8fc\ub294 Disconnecter \ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774\ub294 \ub0b4\ubd80\uc801\uc73c\ub85c Extend \uc758 GetPropertyChangedSignal \uac19\uc740 \uacf3\uc5d0\uc11c \uc0ac\uc6a9\ub418\uae30\ub3c4 \ud569\ub2c8\ub2e4.

"},{"location":"tutorial/10_signal/#bindable","title":"Bindable","text":"

Bindable \uc740 RBXScriptSignal \uacfc \uc720\uc0ac\ud55c \uac1d\uccb4\uc785\ub2c8\ub2e4. Signal.Bindable.New(id:string?) \uc73c\ub85c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub85c\ube14\ub85d\uc2a4\uc758 \uae30\ubcf8 BindableEvent \uc640\ub294 \ub2e4\ub974\uac8c :Fire \uac00 \ud55c\uacf3\uc5d0 \ud569\uccd0\uc838 \uc788\uc2b5\ub2c8\ub2e4.

Note

\ub9cc\uc57d id \ub97c \uc9c0\uc815\ud55c \uacbd\uc6b0, \uac19\uc740 id \ub97c \uac00\uc9c4 Bindable \uc774 \uc788\uc73c\uba74 \uc774\uc804\uac83\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Signal = Quad.Signal\n\nlocal mySignal = Signal.Bindable.New()\n\nlocal connection = mySignal:Connect(function(v)\n    print(v)\nend)\nmySignal:Fire(\"\uc774 \uba54\uc2dc\uc9c0\ub294 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.\")\nconnection:Disconnect()\nmySignal:Fire(\"\uc774 \uba54\uc2dc\uc9c0\ub294 \ucd9c\ub825\ub418\uba74 \uc548\ub429\ub2c8\ub2e4.\")\n\ntask.spawn(function()\n    task.wait(5)\n    mySignal:Fire(\"\uc774 \uba54\uc2dc\uc9c0\ub294 \uc9c0\uc5f0\ub41c \ud6c4 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.\")\nend)\nprint(mySignal:Wait())\n\nmySignal:Once(function(v)\n    print(v)\nend)\nmySignal:Fire(\"\uc774 \uba54\uc2dc\uc9c0\ub294 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.\")\nmySignal:Fire(\"\uc774 \uba54\uc2dc\uc9c0\ub294 \ucd9c\ub825\ub418\uba74 \uc548\ub429\ub2c8\ub2e4.\")\n\nmySignal:Once(function(v)\n    print(v)\nend):Disconnect()\nmySignal:Fire(\"\uc774 \uba54\uc2dc\uc9c0\ub294 \ucd9c\ub825\ub418\uba74 \uc548\ub429\ub2c8\ub2e4.\")\n
"},{"location":"tutorial/10_signal/#bindable_1","title":"Bindable \uba54\uc18c\ub4dc","text":"

Bindable \uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc18c\ub4dc\ub4e4\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.

:Fire(...any)

\ub4f1\ub85d\ub41c \uc5f0\uacb0\ub4e4\uc744 \uc2e4\ud589\ud558\uace0, Wait \uc744 \ud480\uc5b4\uc90d\ub2c8\ub2e4.

:Wait()->(...any)

Fire \uac00 \ud638\ucd9c\ub420 \ub54c \uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4. Fire \uc5d0 \uc0ac\uc6a9\ub41c \uac12\uc774 \ubc18\ud658\ub429\ub2c8\ub2e4.

:Connect((...any)->())->Connection

Fire \uac00 \ud638\ucd9c \ub420 \ub54c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4. Fire \uc5d0 \uc0ac\uc6a9\ub41c \uac12\uc774 \ud638\ucd9c \uc778\uc790\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc5f0\uacb0\uc744 \ub04a\uc744 \uc218 \uc788\ub3c4\ub85d Connection \uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.

:Once((...any)->())->Connection

Connect \uc640 \uc720\uc0ac\ud558\uc9c0\ub9cc, Fire \uac00 \ud55c\ubc88 \ud638\ucd9c\ub41c \ub4a4 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9d1\ub2c8\ub2e4/

:CheckConnected(func)->boolean

\ud568\uc218\uac00 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.

:DisconnectAll()

\ubaa8\ub4e0 \uc5f0\uacb0\uc744 \ub04a\uc2b5\ub2c8\ub2e4. Wait \uc73c\ub85c \uae30\ub2e4\ub9ac\uace0 \uc788\ub294 \uacf3\uc5d0\ub294 nil \uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

:Destroy()

:DisconnectAll() \ub97c \uc218\ud589\ud55c \ud6c4, \uac1d\uccb4\ub97c \ub354\uc774\uc0c1 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4. id \uac00 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub294\uacbd\uc6b0 \uc800\uc7a5\uc18c\uc5d0\uc11c \ud30c\uae30\ud558\uac8c \ub429\ub2c8\ub2e4.

"},{"location":"tutorial/10_signal/#connection","title":"Connection \uba54\uc18c\ub4dc","text":"

Bindable:Connect \uc640 Bindable:Once \ub294 Connection \uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. Connection \uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc18c\ub4dc\ub4e4\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.

:Disconnect()

\uc5f0\uacb0\uc744 \ub04a\uc2b5\ub2c8\ub2e4. Fire \uac00 \ud638\ucd9c\ub418\ub354\ub77c\ub3c4 Connect \ud639\uc740 Once \uc5d0 \uc0ac\uc6a9\ub41c \ud568\uc218\uac00 \uc2e4\ud589\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

:Destroy()

:Disconnect() \uc758 \ubcc4\uce6d\uc785\ub2c8\ub2e4.

"},{"location":"tutorial/10_signal/#disconnecter","title":"Disconnecter","text":"

Disconnecter \ub294 \uc77c\uc885\uc758 Maid \ubaa8\ub4c8\uacfc \ube44\uc2b7\ud55c \uac1d\uccb4\uc785\ub2c8\ub2e4. \uc774 \uac1d\uccb4\uc5d0\ub294 Connection (\ub85c\ube14\ub85d\uc2a4, Quad \ubaa8\ub450 \ud638\ud658) \uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc73c\uba70, \ub098\uc911\uc5d0 \ucd94\uac00\ub41c Connection \uc744 \ud55c\uaebc\ubc88\uc5d0 Disconnect \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Signal.Disconnecter.New(id:string?) \uc73c\ub85c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

Note

\ub9cc\uc57d id \ub97c \uc9c0\uc815\ud55c \uacbd\uc6b0, \uac19\uc740 id \ub97c \uac00\uc9c4 Bindable \uc774 \uc788\uc73c\uba74 \uc774\uc804\uac83\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.

:Add(connection:Connection|RBXScriptConnection)

connection\uc744 \ub9ac\uc2a4\ud2b8\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4. \ub098\uc911\uc5d0 :Disconnect\ub97c \ud638\ucd9c\ud558\uba74 \ucd94\uac00\ub41c \uc5f0\uacb0\uc774 \ud30c\uae30\ub429\ub2c8\ub2e4.

:Disconnect()

\ucd94\uac00\ub41c \ubaa8\ub4e0 \uc5f0\uacb0\uc5d0 Disconnect() \ub97c \uc218\ud589\ud569\ub2c8\ub2e4. \uc774 \ud638\ucd9c \ud6c4\uc5d0 \ucd94\uac00\ub41c \uc5f0\uacb0\uc740 \ubaa8\ub450 \uc0ac\ub77c\uc9c0\uba70. \uc774 \uc694\uccad \ud6c4\uc5d0\ub3c4 \ub2e4\uc2dc :Add \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 Disconnecter \ub97c \uc644\uc804\ud788 \uc0ac\uc6a9\ud558\uc9c0 \ubabb\ud558\ub3c4\ub85d \ud558\ub824\uba74 :Destroy \ub97c \ud638\ucd9c\ud558\uc138\uc694

:Destroy()

:Disconnect() \ub97c \uc218\ud589\ud55c \ud6c4, \uac1d\uccb4\ub97c \ub354\uc774\uc0c1 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4. id \uac00 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub294\uacbd\uc6b0 \uc800\uc7a5\uc18c\uc5d0\uc11c \ud30c\uae30\ud558\uac8c \ub429\ub2c8\ub2e4.

"},{"location":"tutorial/11_extend/","title":"Extend - \ud655\uc7a5\uacfc \uc7ac\uc0ac\uc6a9","text":""},{"location":"tutorial/11_extend/#_1","title":"\ub098\ub9cc\uc758 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uc790","text":"

Quad \uc5d0\uc11c\ub294 \ub85c\ube14\ub85d\uc2a4\uc758 Frame \uc774\ub098 TextButton \uac19\uc740 \uae30\ubcf8 \uc624\ube0c\uc81d\ud2b8\ub9cc \ub9cc\ub4e4 \uc218 \uc788\ub294\uac83\uc774 \uc544\ub2d9\ub2c8\ub2e4. Quad \ub294 \uc790\uc2e0\ub9cc\uc758 \ubc84\ud2bc, \ud639\uc740 \uc5ec\ub7ec \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \ucd94\uc0c1\uc801\uc73c\ub85c \ub9cc\ub4e4\uace0. \ub2e4\uc2dc \ud65c\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d Extend \ub97c \uc9c0\uc6d0\ud569\ub2c8\ub2e4.

Extend \ub294 Register \uc640 \ub354\ubd88\uc5b4 Quad \uc758 \uac00\uc7a5 \uc911\uc694\ud55c \uae30\ub2a5\uc73c\ub85c\uc368, \ub2e4\uc74c\uacfc \uac19\uc740 \uc7a5\uc810\uc744 \uc9c0\ub2d9\ub2c8\ub2e4.

  1. \uc7ac\uc0ac\uc6a9 \uac00\ub2a5\ud569\ub2c8\ub2e4. \ub098\ub9cc\uc758 \ubc84\ud2bc\uc744 \ub9cc\ub4e4\uace0, \uace0\uce58\uace0 \uc2f6\uc740 \ub9c8\uc74c\uc774 \uc0dd\uaca8 \uace0\uce58\uba74 \uc790\ub3d9\uc73c\ub85c \uc0ac\uc6a9\ub41c \uacf3\ub4e4\uc774 \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4.
  2. \uae34 \ucf54\ub4dc\ub97c \ub098\ub204\uc5b4 \ucf54\ub4dc\ub9c8\ub2e4 \ud655\uc2e4\ud55c \ubaa9\uc801\uc744 \ubd80\uc5ec\ud574 \ub354 \uba85\ud655\ud55c \ucf54\ub4dc \uc791\uc131\uc774 \uac00\ub2a5\ud574\uc9d1\ub2c8\ub2e4.
  3. \uc790\uc2e0\ub9cc\uc758 \ud504\ub85c\ud37c\ud2f0\ub97c \ub9cc\ub4e4\uac70\ub098 \uc644\uc804\ud788 \uc6d0\ud558\ub294\ub300\ub85c \uc624\ube0c\uc81d\ud2b8\ub97c \ucee4\uc2a4\ud130\ub9c8\uc774\uc9d5 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
  4. \ud568\uc218\ub098 \uc0dd\uc131\uae30\ub97c \uc9c1\uc811 \ub9cc\ub4dc\ub294 \uac83 \ubcf4\ub2e4 \uc77c\uad00\ub41c \ubc29\ubc95\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.

Extend \uac1d\uccb4\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc0dd\uc131\ud569\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\n-- extend \uac1d\uccb4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4\nlocal myClass = Class.Extend()\n
\uc77c\ubc18\uc801\uc73c\ub85c Extend \ub294 \ud55c \ubaa8\ub4c8\uc5d0 \ud558\ub098\uc529 \ub123\uc2b5\ub2c8\ub2e4.

\ub2e4\uc74c\uacfc \uac19\uc740 \ucf54\ub4dc \uad6c\uc870\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uc138\uc694.

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

localscriptlocalscript.myClass
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Mount = Quad.Mount\nlocal Class = Quad.Class\nlocal Store = Quad.Store\n\nlocal myStore = Store.GetStore(\"myStore\")\nmyStore.bgColor = Color3.fromRGB(0,0,0)\n\n-- Class(require(script.myClass)) \uc640 \uac19\uc2b5\ub2c8\ub2e4.\n-- \uc904\uc5ec\uc11c Class(script.myClass) \ub85c \uc4f8 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\nlocal myClass = Class(script.myClass)\n\n-- \ud504\ub808\uc784\uc5d0 \ub123\uac70\ub098 \ud558\uc5ec\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4\n-- \uc77c\ubc18 \uc624\ube0c\uc81d\ud2b8\uc640 \ub611\uac19\uc774 id \ub97c \ub123\uace0 GetObject \ub85c\n-- \uac00\uc838\uc62c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4\nlocal main = myClass \"main\" {\n    Testing = 1;\n    Text = \"Test\";\n    -- \ub808\uc9c0\uc2a4\ud130 \uac12\uc744 \ub118\uaca8\uc904 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\n    -- \ubc1b\ub294\ucabd\ub3c4 \ub808\uc9c0\uc2a4\ud130\uc778 \uacbd\uc6b0 \uac12\uc774 \uc5f0\ub3d9\ub429\ub2c8\ub2e4.\n    BackgroundColor3 = myStore \"bgColor\";\n}\n\nMount(ScreenGUI,main)\nprint(Store.GetObject(\"main\") == main) -- true\n\n-- \uc774 \uac12\uc744 \ubc14\uafb8\uba74 \uc5f0\ub3d9\ub41c BackgroundColor3 \ub3c4 \ubc14\ub014\uac83\uc785\ub2c8\ub2e4\nmyStore.bgColor = Color3.fromRGB(255,255,255)\n\n-- \uac12 \ubcc0\uacbd\ub428\uc744 \uc5f0\uacb0\ud558\uae30\nmain\n    :GetPropertyChangedSignal(\"AbsolutePosition\")\n    :Connect(function()\n        print(\"AbsolutePosition\",main.AbsolutePosition)\n    end)\n\n-- main:Update()\n-- \uac15\uc81c\ub85c \ub2e4\uc2dc Render \ub97c \uc2e4\ud589\ud558\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4.\n
local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Event = Quad.Event\n\nlocal TextLabel = Class \"TextLabel\"\n\nlocal myClass = Class.Extend()\n\n-- Init \uc5d0\ub294 \ud504\ub85c\ud37c\ud2f0 \ub9ac\uc2a4\ud2b8\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4.\n-- Init \ub294 \uc5c6\ub354\ub77c\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.\nfunction myClass:Init(props)\n    -- \uc0dd\uc131\ub41c \uc624\ube0c\uc81d\ud2b8\uc5d0 \ud504\ub77c\uc774\ube57 \uac12\uc744 \ub9cc\ub4ed\ub2c8\ub2e4.\n    -- \uc774\ub984 \uc55e\uc5d0 _ \uac00 \ubd87\uc73c\uba74 \uc678\ubd80\uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294 \ubaa9\uc801\uc774 \uc544\ub2cc\n    -- \ub0b4\ubd80\uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294 \ubaa9\uc801\uc73c\ub85c\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n    -- \uc774 \uacbd\uc6b0 \uc548\uc804\uc131\uc744 \uc704\ud574 register \ub97c \uc0ac\uc6a9\ud560 \uc218\n    -- \uc5c6\uc2b5\ub2c8\ub2e4.\n    self._testValue = 2\n\n    -- \ud504\ub85c\ud37c\ud2f0\uc758 \uae30\ubcf8\uac12\uc744 \uc815\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n    -- \uc0dd\uc131 \uc2dc \uac12\uc774 \ub204\ub77d\ub41c \uacbd\uc6b0 \uc0ac\uc6a9\ud560 \uac12\uc744 \uc815\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n    -- \ud0a4, \uac12 \uc73c\ub85c \uad6c\uc131\ud569\ub2c8\ub2e4\n    props:Default(\"Text\",\"Testing Label\")\nend\n\n-- myClass \uac00 \uc9c4\uc9dc \uadf8\ub824\uc9c0\ub294 \ubd80\ubd84\uc785\ub2c8\ub2e4.\n-- Render \ub3c4 Init \ucc98\ub7fc \ud504\ub85c\ud37c\ud2f0 \ub9ac\uc2a4\ud2b8\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4.\nfunction myClass:Init(props)\n    return TextLabel {\n        -- self \uc5d0 _label \ub85c \uc774 TextLabel \uc744 \ub123\uc2b5\ub2c8\ub2e4.\n        -- \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uc5d0\ub3c4 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ubb38\ubc95\uc785\ub2c8\ub2e4.\n        self \"_label\";\n\n        -- GetPropertyChangedSignal \uac00 \uc791\ub3d9\ud560 \uc218 \uc788\ub3c4\ub85d\n        -- \ud504\ub85c\ud37c\ud2f0 \ubcc0\uacbd \uc774\ubca4\ud2b8\ub97c \uc5f0\uacb0\ud574\uc90d\ub2c8\ub2e4\n        -- \uc774 \ub610\ud55c \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uc5d0\ub3c4 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ubb38\ubc95\uc785\ub2c8\ub2e4.\n        [Event.Prop \"AbsolutePosition\"] = self \"AbsolutePosition\";\n        -- \ub9c8\uc6b0\uc2a4 \ud074\ub9ad\uac19\uc740 \ub2e4\ub978 \uc774\ubca4\ud2b8\ub97c GetPropertyChangedSignal \uc5d0\n        -- \uc5f0\uacb0\ud558\ub824\uba74 :EmitPropertyChangedSignal() \ub97c \ud638\ucd9c\ud574\uc8fc\uba74 \ub429\ub2c8\ub2e4.\n        [Event \"MouseEnter\"] = function (this,x,y)\n            -- \ud0a4, \uac12\uc774 \ub4e4\uc5b4\uac11\ub2c8\ub2e4. \uac12\uc774 \uc5c6\uc73c\uba74 self[key] \ub85c \ub300\uc2e0\ud569\ub2c8\ub2e4.\n            self:EmitPropertyChangedSignal(\"Testing2\",1)\n        end;\n\n        -- \ubc1b\uc740 \ub808\uc9c0\uc2a4\ud130\ub97c \uc5f0\ub3d9\ud569\ub2c8\ub2e4.\n        -- \ub9cc\uc57d props.BackgroundColor3 \ub9cc \uc0ac\uc6a9\ud558\uba74\n        -- \ucc98\uc74c\uc5d0\ub9cc \ub808\uc9c0\uc2a4\ud130\uc5d0\uc11c \uac12\uc744 \uc77d\uc5b4\uc635\ub2c8\ub2e4.\n        -- \ub530\ub77c\uc11c \uac12\uc744 \ubcc0\uacbd\ud574\ub3c4 \ubcc0\uacbd\uc0ac\ud56d\uc774 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n        BackgroundColor3 = props \"BackgroundColor3\";\n\n        -- \uc785\ub825 \uac12\uacfc \uc0c1\uad00\uc5c6\uc774 \ub808\uc9c0\uc2a4\ud130\ub97c \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n        -- \uc774 \uacbd\uc6b0 main.Text = \"New\" \ucc98\ub7fc \uc9c1\uc811 \ubcc0\uacbd\ud558\uba74\n        -- \uadf8 \ubcc0\uacbd\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4.\n        Text = props \"Text\";\n\n        -- ... \uc790\uc2dd\uc744 \ub123\uc5b4\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.\n    }\nend\n\n-- function myClass:Unload(object)\n-- :Destroy \uac00 \ud638\ucd9c\ub420 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ub530\ub85c \uc120\uc5b8\ud558\uc9c0 \uc54a\uc544\ub3c4\n-- \uc5f0\uacb0\uc744 \ubaa8\ub450 \ub04a\uace0 \uc5c6\uc5d0\uc8fc\uc9c0\ub9cc \ud544\uc694\ud55c \uacbd\uc6b0 \uc9c1\uc811 \uc5c6\uc5d0\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n-- object \ub294 :Render \uac00 \ubc18\ud658\ud55c \uac12\uc785\ub2c8\ub2e4\n\n-- AbsolutePosition \uac12\uc744 \ubc18\ud658\ud560 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4\nfunction myClass.Getter.AbsolutePosition(self)\n    return self._label.AbsolutePosition\nend\n\n-- AbsolutePosition \uac12\uc744 \uc124\uc815\ud560 \uc218 \uc5c6\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4\nfunction myClass.Setter.AbsolutePosition(self,newValue)\n    -- \ud544\uc694\ud55c \uacbd\uc6b0 \uac12\uc744 \uc124\uc815\ud558\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n    error(\"AbsolutePosition \uac12\uc740 \uc124\uc815\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4\")\nend\n\n-- main.Testing = 2 \ub2e4\uc74c\uacfc \uac19\uc774 \uac12\uc744 \ubcc0\uacbd\ud558\uba74 \uc624\ube0c\uc81d\ud2b8\uac00\n-- \uc644\uc804\ud788 \ub2e4\uc2dc \uadf8\ub824\uc9d1\ub2c8\ub2e4. \uc989 \uc5c5\ub370\uc774\ud2b8 \ud2b8\ub9ac\uac70\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.\nmyClass.UpdateTriggers.Testing = true\n\n-- \ub9cc\ub4e0 \ud074\ub798\uc2a4\ub97c \ubc18\ud658\ud574\uc90d\uc2dc\ub2e4.\nreturn myClass\n
"},{"location":"tutorial/1_import/","title":"Import - \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131","text":""},{"location":"tutorial/1_import/#_1","title":"\ub85c\ube14\ub85d\uc2a4 \uc624\ube0c\uc81d\ud2b8 \ubd88\ub7ec\uc624\uae30","text":"

Frame \uacfc \uac19\uc740 UI \uc624\ube0c\uc81d\ud2b8\ub97c \ub9cc\ub4e4\uace0 \uc2f6\uc740 \uacbd\uc6b0 \uba3c\uc800 import \ub97c \uc774\uc6a9\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc774 \uc785\ub825\ud574\ubcf4\uc138\uc694!

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal Frame = Class \"Frame\"\n\nprint(\n    Frame {\n        Name = \"Wow!\";\n        -- \ub2e4\uc74c\uacfc \uac19\uc774 \uc790\uc2dd\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n        Frame {\n            Name = \"Child\";\n        };\n    }\n)\n

\ub098\uc911\uc5d0 \uc790\uc2e0\ub9cc\uc758 UI \uc624\ube0c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc9c0\ub9cc, \uc77c\ubc18\uc801\uc778 \ub85c\ube14\ub85d\uc2a4\uac00 \uc9c0\uc6d0\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\uc758 \uacbd\uc6b0 Class(ClassName:string) \uc73c\ub85c \ubd88\ub7ec\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4

"},{"location":"tutorial/1_import/#class","title":"\ubd88\ub7ec\uc628 Class \uc5d0 \uae30\ubcf8\uac12 \uc124\uc815","text":"

\ubd88\ub7ec\uc628 Class \uc5d0 \uae30\ubcf8\uac12\uc744 \uc124\uc815\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 BorderSizePixel \uc640 \uac19\uc774 \uc790\uc8fc \uc0ac\uc6a9\ub420 \uc218 \uc788\ub294 \ud504\ub85c\ud37c\ud2f0\ub97c \ubbf8\ub9ac \uc9c0\uc815\ud574 \ub458 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\n\nlocal FrameWithoutBorder = Class \"Frame\"\nFrameWithoutBorder.BorderSizePixel = 0\n\nlocal FrameWithBorder = Class \"Frame\"\nFrameWithBorder.BorderSizePixel = 1\n\nlocal frame1 = FrameWithoutBorder {}\nlocal frame2 = FrameWithBorder {}\nlocal frame3 = FrameWithBorder {\n    -- \uac12\uc744 \ub36e\uc5b4 \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n    -- \uc774\ub807\uac8c \ud558\uba74 \uae30\ubcf8\uac12\uc774 \ubb34\uc2dc\ub429\ub2c8\ub2e4.\n    BorderSizePixel = 0;\n}\n\nprint(frame1.FrameWithBorder.BorderSizePixel)\nprint(frame2.FrameWithBorder.BorderSizePixel)\nprint(frame3.FrameWithBorder.BorderSizePixel)\n

\uc774\uc81c \uadf8\ub824\ub0b8 \ud504\ub808\uc784\uc744 \ud654\uba74\uc5d0 \uadf8\ub824\ubcf4\uace0 \uc2f6\ub098\uc694? \ub2e4\uc74c \ud29c\ud1a0\ub9ac\uc5bc Mount \ub97c \ud655\uc778\ud574\ubcf4\uc138\uc694!

"},{"location":"tutorial/2_mount/","title":"Mount - \ud654\uba74\uc5d0 UI \ud45c\ud604","text":""},{"location":"tutorial/2_mount/#ui","title":"\ud654\uba74\uc5d0 UI \ub97c \ud45c\uc2dc\ud558\uae30","text":"

Quad \ubaa8\ub4c8\uc5d0\uc11c \ubaa8\ub4e0 Parent \ucc98\ub9ac\ub294 Mount \ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4. Mount(to:any,...item:any?)->mounts \ud568\uc218\ub97c \uc774\uc6a9\ud558\uba74 \ub2e4\ub8e8\ub294 \uc624\ube0c\uc81d\ud2b8\uac00 \ub85c\ube14\ub85d\uc2a4 Instance \uc778\uc9c0, \ud5a5\ud6c4 \uc18c\uac1c\ub420 Quad \ud655\uc7a5 \ud074\ub798\uc2a4\uc778\uc9c0 \uc0c1\uad00\uc5c6\uc774 \uc54c\uc544\uc11c Parent \uac00 \ucc98\ub9ac\ub429\ub2c8\ub2e4.

--- StarterGui \uc548\uc5d0 ScreenGui \ub97c \ub123\uace0 \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\ub85c \uc785\ub825\ud574\ubcf4\uc138\uc694\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nMount(ScreenGui,\n    Frame {\n        Name = \"Wow!\";\n    }\n    --[[\n    , Frame {} , Frame {}\n    \ub354\ub9ce\uc740 \uc624\ube0c\uc81d\ud2b8\ub97c \ub2e4\uac19\uc774 Mount \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n    ]]\n)\n
"},{"location":"tutorial/2_mount/#_1","title":"\ub9c8\uc6b4\ud2b8 \uac1d\uccb4","text":"

\ud3b8\uc758\ub97c \uc704\ud574\uc11c Mount \ud568\uc218\ub294 mounts \ub77c\ub294 \uac1d\uccb4\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. \uc774\uac83\uc744 \uc774\uc6a9\ud558\uba74 \ud544\uc694\uc5d0 \ub530\ub77c\uc11c Mount \uc0c1\ud0dc\ub97c \ud574\uc81c\ud558\uac70\ub098 \ucd94\uac00 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. mounts \uac1d\uccb4\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc18c\ub4dc\ub97c \uac00\uc9d1\ub2c8\ub2e4.

:Unmount()

\uc774\ub807\uac8c \ud558\uba74 \ub9c8\uc6b4\ud2b8\ub41c Instance \ub97c \uc9c0\uc6cc\ubc84\ub9bd\ub2c8\ub2e4. Quad \ub294 \uc548\uc804\ud55c \uba54\ubaa8\ub9ac \uad00\ub9ac\ub97c \uc704\ud574 gc \uc758 \uae30\ub2a5\uc5d0 \uc758\uc874\ud558\ubbc0\ub85c, gc \uc2dc\uac04\ucc28\ub85c \uc778\ud574 Store.GetObject \uc5d0\uc11c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0ac\ub77c\uc9c0\ub294\ub370 \uc2dc\uac04\uc774 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui,mainFrame)\n\nlocal childFrame = Frame {}\nlocal childFrameMount = Mount(mainFrame,childFrame)\nchildFrameMount:Unmount()\n-- childFrame \uc740 \ub2e8\uc21c\ud788 .Parent = nil \ub418\ub294 \uac83\uc744 \ub118\uc5b4 \uba54\ubaa8\ub9ac\uc5d0\uc11c \uc0ac\ub77c\uc9d1\ub2c8\ub2e4\n-- \uc989, Destroy() \uac00 \ud638\ucd9c\ub429\ub2c8\ub2e4\n

:Add(item:any)

Mount \uc5d0 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ucc98\uc74c \uc124\uc815\ud55c to \uac12\uc744 \ub530\ub77c \ubd80\ubaa8\uac00 \uacb0\uc815\ub429\ub2c8\ub2e4.

\uc774 \ub3d9\uc791\uc740 \ub9ac\uc2a4\ud2b8\ub97c \ub9cc\ub4e4 \ub54c \uc720\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc\ub85c\ub4dc \ub3d9\uc791\uc2dc \uc9c1\uc811 \uc81c\uac70\uac00 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount = Quad.Class,Quad.Mount\n\nlocal Frame = Class \"Frame\"\n\nlocal mainFrame = Frame {}\nMount(ScreenGui, mainFrame)\n\nlocal lastListMount = Mount(mainFrame)\nlocal function refreshList()\n    lastListMount:Unmount() -- \uc774\uc804 children \uc744 \uc54c\uc544\uc11c \uc81c\uac70\ud569\ub2c8\ub2e4\n    for i = 1,10 do\n        lastListMount:Add(Frame { Name = tostring(i) })\n    end\nend\n\ntask.spawn(function()\n    while true do\n        refreshList()\n        task.wait(2)\n    end\nend)\n

\ub2e4\uc74c\uacfc \uac19\uc774 \uc774\uc804 children \uc744 \uac04\uc811\uc801\uc73c\ub85c \uc81c\uac70\ud558\uace0 \uc0c8\ub85c\uc6b4 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e8 ScrollFrame \uc758 \uacbd\uc6b0 CanvasPosition\uc774 \ucd08\uae30\ud654 \ub418\uc5b4\ubc84\ub9ac\ubbc0\ub85c \uc790\uc2dd\ub4e4\uc744 :Unmount() \ud558\uae30 \uc804\uc5d0 \uc704\uce58\ub97c \uc800\uc7a5\ud558\uace0 \ub2e4\uc2dc \ubd88\ub7ec\uc640\uc57c \ud569\ub2c8\ub2e4

"},{"location":"tutorial/3_getObject/","title":"GetObject - \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc544\uc774\ub514 \ubd80\uc5ec","text":"\uc77d\uae30 \uc804...

\ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Store.GetObject \uac00 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Store.GetObject \ub294 \uacf5\uc720\ub429\ub2c8\ub2e4

"},{"location":"tutorial/3_getObject/#_1","title":"\uc624\ube0c\uc81d\ud2b8\uc5d0 \uc544\uc774\ub514 \ubd80\uc5ec\ud558\uae30, \uc0ac\uc6a9\ud558\uae30","text":"

\ubcc0\uc218\uc5d0 \ub9cc\ub4e4\uc5b4\uc9c4 \uc624\ube0c\uc81d\ud2b8\ub97c \ud558\ub098\ud558\ub098 \uc800\uc7a5\ud574\uc57c\ud558\ub098\uc694? \uc544\ub2c8\uc694, Quad \uc5d0\ub294 \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount,Store = Quad.Class,Quad.Mount,Quad.Store\n\nlocal Frame = Class \"Frame\"\n\nFrame \"mainFrame\" {\n    Size = UDim2.fromScale(1,1);\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n

\uc544\uc774\ub514\uc5d0 \ud5c8\uc6a9\ub418\ub294 \uae00\uc790\ub294 \ubcc0\uc218\uba85\uacfc \uac19\uc2b5\ub2c8\ub2e4. \ub300\uc18c\ubb38\uc790, \uc22b\uc790, \uc5b8\ub354\ubc14(_) \ub97c \ud5c8\uc6a9\ud569\ub2c8\ub2e4. \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc Frame \"mainFrame\" {} \uc640 \uac19\uc774 id \uac12\uc744 \uc9c0\uc815\ud574 \uc900\ub2e4\uba74 \uc0dd\uc131\ub41c \uc624\ube0c\uc81d\ud2b8\ub294 \uadf8 \uc544\uc774\ub514\ub97c \uac00\uc9c0\uac8c \ub429\ub2c8\ub2e4. Store.GetObject(id:string)->Object \ub294 \uc0dd\uc131\ub41c \uac1d\uccb4\uc911 \uac00\uc7a5 \uccab\ubc88\uc9f8\uc758 id \uac00 \uc77c\uce58\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \ubc18\ud658\ud574 \uc90d\ub2c8\ub2e4.

local index = 1\nFrame (\"mainFrame\" .. index) {}\nprint(Store.GetObject(\"mainFrame\" .. index))\n

\uc704\ucc98\ub7fc \uc0dd\uc131\uc774\ub098 \uac00\uc838\uc624\uae30\uc5d0\uc11c \uc2dd\uc744 \ub9cc\ub4e4\uc5b4 \ub123\uc744 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.

"},{"location":"tutorial/3_getObject/#_2","title":"\ub2e4\ub7c9\uc758 \uc624\ube0c\uc81d\ud2b8\ub97c \ub2e4\ub8e8\uae30","text":"\uc8fc\uc758

Store.GetObjects\uc758 \ubc18\ud658\uac12\uc778 objectList\ub294 \uce90\uc2dc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4. objectList\ub97c local \uc5d0 \ub123\uace0 \uacc4\uc18d\ud574\uc11c \uc720\uc9c0\uc2dc\ud0a4\uc9c0 \ub9c8\uc2ed\uc2dc\uc624, \ubc18\ud658\uac12\uc740 \uc790\ub3d9\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8 \ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

Quad \ub294 \ub2e4\ub7c9\uc758 \uc624\ube0c\uc81d\ud2b8\ub97c \ub2e4\ub8e8\uae30 \ud3b8\ud558\ub3c4\ub85d Store.GetObjects(id:string)->objectList \ub77c\ub294 \ud568\uc218\ub97c \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4.

\uc2e4\ud5d8\uc73c\ub85c, \uc0c9\uae54\uc774 \ub79c\ub364\ud558\uac8c \ubc14\ub00c\ub294 \ud504\ub808\uc784\ub4e4\uc744 \ub9cc\ub4e4\uc5b4 \ubd05\uc2dc\ub2e4

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class,Mount,Store = Quad.Class,Quad.Mount,Quad.Store\n\nlocal Frame = Class \"Frame\"\n\nFrame \"mainFrame\" {\n    Size = UDim2.fromScale(1,1);\n    Frame \"Child\" {\n        Size = UDim2.fromOffset(20,20);\n    };\n    Frame \"Child\" {\n        Size = UDim2.fromOffset(20,20);\n        Position = UDim2.fromOffset(30,0);\n    };\n    Frame \"Child\" {\n        Size = UDim2.fromOffset(20,20);\n        Position = UDim2.fromOffset(60,0);\n    };\n    Frame \"Child\" {\n        Size = UDim2.fromOffset(20,20);\n        Position = UDim2.fromOffset(90,0);\n    };\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- \uac12\uc744 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uac12\uc744 \uc77d\uac70\ub098 :Connect \ud560 \uc218\ub294 \uc5c6\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"Child\").Size = UDim2.fromOffset(30,30)\n\n-- \ud544\uc694\uc5d0 \ub530\ub77c Store.GetObjects(\"Child\") \ub97c pairs \uc5d0 \ub123\uc5b4 for \ubb38\uc744 \uc0ac\uc6a9\ud558\uac70\ub098\n-- :Each , :EachAsync , :IsEmpty \ud568\uc218\ub97c \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\ntask.spawn(function()\n    while true do\n        Store.GetObjects(\"Child\"):Each(function (item, index)\n            item.BackgroundColor3 = Color3.fromRGB(\n                math.random(0,255),\n                math.random(0,255),\n                math.random(0,255)\n            )\n        end)\n        task.wait(1)\n    end)\nend\n\n-- for \ubb38\uc744 \uc774\uc6a9\ud574\uc11c \ucd9c\ub825\ud569\ub2c8\ub2e4\nfor _,child in ipairs(Store.GetObjects(\"Child\")) do\n    print(child)\nend\n
"},{"location":"tutorial/3_getObject/#objectlist","title":"objectList","text":"

Store.GetObjects() \uc758 \ubc18\ud658 objectList \uc758 \uba54\uc18c\ub4dc\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.

:Each((item:any, index:number)->())

\uc77c\ubc18\uc801\uc778 \ubc18\ubcf5\uc785\ub2c8\ub2e4. for \ub97c \uc0ac\uc6a9\ud558\ub294\uac83\uacfc \ud6a8\uacfc\uac00 \uac19\uc73c\ub098 \ud568\uc218\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4

:EachAsync((item:any, index:number)->())

\ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uace0 \ubc14\ub85c\ubc14\ub85c \ub2e4\uc74c \uc544\uc774\ud15c\uc73c\ub85c \ub118\uc5b4\uac11\ub2c8\ub2e4. \ucf54\ub8e8\ud2f4\uc774 \uc774\uc6a9\ub429\ub2c8\ub2e4. wrap() \ucf54\ub8e8\ud2f4\uc744 \ubaa8\ub974\uac70\ub098, \ud544\uc694\uc131\uc774 \uc5c6\ub294\uacbd\uc6b0 \uc77c\ubc18\uc801\uc73c\ub85c :Each \ub97c \uc0ac\uc6a9\ud574\ub3c4 \ub429\ub2c8\ub2e4

:IsEmpty()

\uc774 ObjectList \uac00 \ube44\uc5b4\uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.

:Remove(indexOrItem:number|any)

objectList \uc5d0\uc11c \ud574\ub2f9\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4. , & \ub97c \uc0ac\uc6a9\ud55c \uace0\uae09 \uac80\uc0c9\uc5d0\uc11c\ub294 \uc791\ub3d9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4

"},{"location":"tutorial/3_getObject/#id","title":"\uace0\uae09 ID \uc0ac\uc6a9\ud558\uae30","text":"

id \uae30\ub2a5\uc744 \uc870\uae08\ub354 \uace0\uae09\uc801\uc778 \ubc29\ubc95\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.

\uc6a9\ubc95\uc608\uc81c
-- \ub450 \uc544\uc774\ub514\ub97c \uac00\uc9c4 \ud504\ub808\uc784\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4\nFrame \"a,b\" {}\n-- a \ub97c \uac00\uc9c4\uac83\uacfc, a \uc640 b \ub97c \uac00\uc9c4\uac83\uc744 \uac00\uc838\uc635\ub2c8\ub2e4\nStore.GetObjects(\"a,a&b\"):Each(function(item)\n    print(item)\nend)\n

\uc880\ub354 \uc9c1\uad00\uc801\uc778 \ud655\uc778\uc744 \uc704\ud574\uc11c \uc791\ub3d9\uc2dc\ucf1c\ubcf4\uc138\uc694.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Mount\nlocal Mount = Quad.Store\nlocal Store = Quad.Class\n\nlocal Frame = Class \"Frame\"\n\n--\ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ubaa8\ub450 \uac00\uc9c4 \ud504\ub808\uc784\uc744 \uc0dd\uc131\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\nFrame \"a,b\" {\n    Name = \"main\";\n    Frame \"a\" {\n        Name = \"Child1\";\n    };\n    Frame \"b\" {\n        Name = \"Child2\";\n    };\n}\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ub458\ub2e4 \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a,b\"):Each(function(item, index)\n    print(item.Name)\nend)\nprint(\"----\")\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a \uc640 b \ub97c \ub3d9\uc2dc\uc5d0 \uac00\uc9c4 \uac83\uc744 \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a&b\"):Each(function(item, index)\n    print(item.Name)\nend)\nprint(\"----\")\n\n-- \ub2e4\uc74c\uacfc \uac19\uc774 a\uc640b \ub97c \ub3d9\uc2dc\uc5d0 \uac00\uc9c4\uac83\uacfc, b \ub97c \uac00\uc9c4\uac83\uc744 \uc120\ud0dd\n-- \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nStore.GetObjects(\"a&b,b\"):Each(function(item, index)\n    print(item.Name)\nend)\n

GetObjects \uc5d0\ub294 \uc774 \ub450 \uc5f0\uc0b0\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uace0, \uc0dd\uc131\uc2dc\uc5d0\ub294 , \uc73c\ub85c \uc5ec\ub7ec \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub744\uc5b4\uc4f0\uae30\ub294 \ubb34\uc2dc\ub429\ub2c8\ub2e4

\uc8fc\uc758

\uace0\uae09 ID \uc0ac\uc6a9\uc2dc objectList:Remove \uba54\uc18c\ub4dc\ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4

"},{"location":"tutorial/3_getObject/#id_1","title":"id \ucd94\uac00\uc640 \uc81c\uac70","text":"

\uacbd\uc6b0\uc5d0 \ub530\ub77c \uc774\ubbf8 \uc0dd\uc131\ud55c \uc624\ube0c\uc81d\ud2b8\uc5d0 id \ub97c \ucd94\uac00 \ud639\uc740 \uc81c\uac70\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Store = Quad.Store\n\nlocal Frame = Class \"Frame\"\n\nFrame \"testing\" {}\n\n-- \uc544\uc774\ub514\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4\nStore.AddObject(\n    \"a,b\", Store.GetObject(\"testing\")\n)\n\n-- \uc544\uc774\ub514\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4\nStore.GetObjects(\"a\"):Remove(Store.GetObject(\"testing\"))\n

Store.AddObject(ids:string, item:any) \ub97c \uc774\uc6a9\ud574 item \uc5d0 \uc544\uc774\ub514\ub97c \ucd94\uac00\ud558\uace0 :Remove(item:any) \ub97c \uc774\uc6a9\ud574 item \uc5d0 \uc544\uc774\ub514\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4

"},{"location":"tutorial/4_style/","title":"Style - \uc18d\uc131 \uac12 \ubc88\ub4e4\ub9c1","text":"\uc77d\uae30 \uc804...

\ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Style \uae30\ub2a5\uc774 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Style \ub294 \uacf5\uc720\ub429\ub2c8\ub2e4

"},{"location":"tutorial/4_style/#_1","title":"\ubc18\ubcf5\ub418\ub294 \uc18d\uc131\uac12\uc744 \uc904\uc774\uae30","text":"

Quad \uc5d0\uc11c\ub294 \ubc18\ubcf5\uc801\uc778 \uc18d\uc131\ub4e4\uc744 \uc904\uc5ec \uc4f8 \uc218 \uc788\ub3c4\ub85d Style \uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\n\n-- \uc0c8\ub85c\uc6b4 \uc2a4\ud0c0\uc77c\uc744 \ud558\ub098 \ub9cc\ub4ed\ub2c8\ub2e4\nlocal myStyle = Style {\n    Size = UDim2.fromOffset(20,20);\n    BackgroundColor3 = Color3.fromRGB(255,255,0);\n    BackgroundTransparency = 0.5;\n}\n\nFrame \"mainFrame\" {\n    Size = UDim2.fromScale(1,1);\n    Frame \"Child\" {\n        myStyle; -- \uc2a4\ud0c0\uc77c\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4!\n    };\n    Frame \"Child\" {\n        Position = UDim2.fromOffset(30,0);\n        myStyle;\n    };\n    Frame \"Child\" {\n        Position = UDim2.fromOffset(60,0);\n        myStyle;\n    };\n    Frame \"Child\" {\n        Position = UDim2.fromOffset(90,0);\n        -- \uc2a4\ud0c0\uc77c\uc740 \ub36e\uc5b4\uc368 \uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n        BackgroundColor3 = Color3.fromRGB(255,0,0);\n        myStyle;\n    };\n}\n\nMount(ScreenGUI,Store.GetObject(\"mainFrame\"))\n

Style\uc744 \uc0ac\uc6a9\ud558\uba74 \ub9ce\uc740 \uc591\uc758 \uc18d\uc131\uc744 \ud558\ub098\uc5d0 \ubcc0\uc218\ub85c \uc9d1\uc5b4\ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Style\uc744 \uc0ac\uc6a9\ud574\uc11c \ub9ce\uc740 \uc591\uc758 \ucf54\ub4dc\ub97c \uc904\uc5ec\ubcf4\uc138\uc694

"},{"location":"tutorial/4_style/#id","title":"ID \ub85c \ud0c0\uac9f\uc744 \uc9c0\uc815\ud558\uae30","text":"

Style\uc5d0\ub294 \ud0c0\uac9f id\ub97c \uc9c0\uc815\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\n\n-- \uc5ec\uae30\uc5d0\ub294 & \ub098 , \uac00 \uc801\uc6a9\ub418\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4!\nStyle \"Child\" {\n    Size = UDim2.fromOffset(20,20);\n    BackgroundColor3 = Color3.fromRGB(255,255,0);\n    BackgroundTransparency = 0.5;\n}\n\n-- \ub2e8, Style\uc740 \uba3c\uc800 \uc120\uc5b8\ud574\uc57c\ud569\ub2c8\ub2e4, Frame\uc744 \uba3c\uc800 \ub9cc\ub4e4\uace0\n-- Style\uc744 \uc120\uc5b8\ud558\uba74 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\nFrame \"mainFrame\" {\n    Size = UDim2.fromScale(1,1);\n    Frame \"Child\" {};\n    Frame \"Child\" { Position = UDim2.fromOffset(30,0) };\n}\n\nMount(ScreenGUI,Store.GetObject(\"mainFrame\"))\n

Style(id:string){ any }\ub97c \uc774\uc6a9\ud574 \uc2a4\ud0c0\uc77c\uc744 \uc120\uc5b8\ud574\uc8fc\uba74 \ub098\uc911\uc5d0 \ud574\ub2f9 id\ub97c \uac00\uc9c4 \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc \ud574\ub2f9 \uc2a4\ud0c0\uc77c\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4.

"},{"location":"tutorial/5_event/","title":"Event - \uc774\ubca4\ud2b8 \ud578\ub4e4\ub9c1","text":""},{"location":"tutorial/5_event/#_1","title":"\uc774\ubca4\ud2b8 \ub4f1\ub85d\ud558\uae30","text":"

MouseButton1Click \ud639\uc740 GetPropertyChangedSignal \uac19\uc740 \ub85c\ube14 \uae30\ubcf8 \uc774\ubca4\ud2b8\ub97c \uac04\ub2e8\ud558\uac8c \ub4f1\ub85d\ud558\uace0 \uc2f6\uc73c\uc2e0\uac00\uc694? Event \ub97c \uc774\uc6a9\ud574\ubcf4\uc138\uc694.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Event = Quad.Event\nlocal Store = Quad.Store\n\nlocal TextButton = Class \"TextButton\"\nlocal Count = 0\n\nTextButton \"mainButton\" {\n    Size = UDim2.fromOffset(200,200);\n    Text = \"0 \ubc88 \ud074\ub9ad\ud588\uc2b5\ub2c8\ub2e4\";\n    [Event \"MouseButton1Click\"] = function(self,x,y)\n        Count = Count + 1\n        self.Text = Count .. \" \ubc88 \ud074\ub9ad\ud588\uc2b5\ub2c8\ub2e4\"\n    end;\n}\nMount(ScreenGUI, Store.GetObject(\"mainButton\"))\n
"},{"location":"tutorial/5_event/#_2","title":"\uc774\ubc34\ud2b8 \ub9ac\uc2a4\ud2b8","text":"

\uc801\uc6a9\uac00\ub2a5\ud55c Event \ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4

Event(name:string)

\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 \uc774\ubca4\ud2b8\ub4e4\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4, MouseEnter, MouseLeave, MouseButton1Down, MouseButton1Up \ub4f1\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4 \uae30\ubcf8\uc801\uc73c\ub85c \ub85c\ube14\ub85d\uc2a4\uc758 \uae30\ubcf8 \uc774\ubca4\ud2b8\ub4e4\uacfc \ub2e4\ub974\uac8c, \uccab\ubc88\uc9f8 \uc778\uc790\ub85c self \ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

\uc6a9\ubc95\uc608\uc81c - \ubc84\ud2bc\ud074\ub9ad
Frame {\n    [Event \"MouseEnter\"] = function (self)\n        print(self.Name .. \"\uc5d0 \ub9c8\uc6b0\uc2a4\uac00 \uc62c\ub77c\uc654\uc2b5\ub2c8\ub2e4\")\n    end;\n}\n
local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal TextButton = Class \"TextButton\"\n\nTextButton \"mainButton\" {\n    Size = UDim2.fromOffset(200,200);\n    [Event \"MouseEnter\"] = function (self)\n        print(\"\ubc84\ud2bc\uc774 \ud074\ub9ad\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n    end;\n}\nMount(ScreenGUI, Store.GetObject(\"mainButton\"))\n

Event.Created

\uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub418\uc5c8\uc744 \ub54c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uc778\uc790\ub85c self \ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

-- \uc6a9\ubc95\nFrame {\n    [Event.Created] = function (self)\n        print(self.Name .. \"\uc774 \uc0dd\uc131\ub418\uc5c8\uc5b4\uc694\")\n    end;\n}\n

\uc8fc\uc758

Event.Created \uac00 \uc2e4\ud589\ub420 \ub54c\ub294 Parent \uac12\uc774 \uc815\ud574\uc9c0\uc9c0 \uc54a\uc558\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. self.Parent \ub294 \uc811\uadfc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4. Class.Extend \uc5d0\uc11c\ub294 AfterRender \ub97c \uc774\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.

Event.CreatedAsync

Event.Created \uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc, \ucf54\ub8e8\ud2f4 \uc548\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4. objectList:EachAsync() \ucc98\ub7fc \ubc18\ud658\uc744 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

-- \uc6a9\ubc95\nFrame {\n    Frame {\n        Name = \"A\";\n        [Event.CreatedAsync] = function (self)\n            -- \uc774 \ud568\uc218\uac00 \ub05d\ub098\uc9c0 \uc54a\ub354\ub77c\ub3c4 \ub2e4\uc74c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub420 \uc218 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4\n            task.wait(5)\n        end;\n    };\n    Frame {\n        Name = \"B\";\n        [Event.Created] = function (self)\n            print(self.Name .. \"\uac00 \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4\")\n        end;\n    };\n}\n

\uc8fc\uc758

Event.CreatedAsync \uac00 \uc2e4\ud589\ub420 \ub54c\ub294 Parent \uac12\uc774 \uc815\ud574\uc9c0\uc9c0 \uc54a\uc558\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. self.Parent \ub294 \uc811\uadfc\ud574\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4.

Event.Prop(propertyName:string)

\ud504\ub85c\ud37c\ud2f0 \uac12\uc774 \ubcc0\uacbd\ub428\uc744 \uc5f0\uacb0\ud569\ub2c8\ub2e4.

-- \uc6a9\ubc95\nTextBox {\n    Text = \"\uc544\ubb34\uac70\ub098 \uc785\ub825\ud558\uc138\uc694\";\n    [Event.Prop \"Text\"] = function (self,text)\n        -- \ud3b8\uc758\uc0c1\uc758 \uc774\uc720\ub85c \ubcc0\uacbd\ub41c \uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4\n        print(text)\n    end;\n}\n

"},{"location":"tutorial/6_tween/","title":"Tween - \ud2b8\uc708\ud6a8\uacfc","text":""},{"location":"tutorial/6_tween/#_1","title":"\ud2b8\uc704\ub2dd","text":"

Quad\uc5d0\ub294 \ud2b8\uc708\uc744 \ub3c4\uc640\uc8fc\ub294 \ubaa8\ub4c8\uc774 \ub0b4\uc7a5\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud2b8\uc708 \ubaa8\ub4c8\uc740 \ub2e8\uc21c\ud55c Instance\ub4e4\uc744 \ub118\uc5b4\uc11c table \ud615\uc2dd\ub3c4 \ud2b8\uc708\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ub098\uc911\uc5d0 \ucee4\uc2a4\ud140 \uc624\ube0c\uc81d\ud2b8\ub97c \ud2b8\uc708\ud560 \ub54c \uc720\uc6a9\ud569\ub2c8\ub2e4. Quad \uc5d0\uc11c\ub294 \uc2e4\uc81c\ub85c \uc9c1\uc811\uc801\uc73c\ub85c Tween \uc744 \uc0ac\uc6a9\ud560 \uc77c\uc740 \uc801\uc73c\uba70 \ucd94\ud6c4 \uc124\uba85\ub418\ub294 register:Tween()\ub85c \uc0ac\uc6a9\ud558\ub294\uac83\uc774 \uad8c\uc7a5\ub429\ub2c8\ub2e4.

\ud2b8\uc708\uc740 \uc77c\ubc18\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc774 \uc218\ud589\ud569\ub2c8\ub2e4.

\uc6a9\ubc95\uc608\uc81c - \uc6c0\uc9c1\uc774\ub294 \ubc84\ud2bc
Tween.RunTween(myFrame,{\n    -- \ud2b8\uc708 \uc635\uc158\n    Easing = Tween.Easing.Expo;\n    Direction = Tween.Directions.Out;\n    Time = 1;\n    ...\n},{\n    -- \ud504\ub85c\ud37c\ud2f0 \ubaa9\ub85d\n})\n

\ud074\ub9ad\uc2dc \uc6c0\uc9c1\uc774\ub294 \ubc84\ud2bc\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Tween = Quad.Tween\n\nlocal Frame = Class \"Frame\"\nlocal TextButton = Class \"TextButton\"\nlocal on = false\n\nFrame \"mainFrame\" {\n    Size = UDim2.fromOffset(300,300);\n    BackgroundColor3 = Color3.fromRGB(255,255,255);\n    TextButton \"Child\" {\n        Text = \"Click Me!\";\n        BackgroundColor3 = Color3.fromRGB(255,100,255);\n        Position = UDim2.fromOffset(80,100);\n        Size = UDim2.fromOffset(20,20);\n        [Event \"MouseButton1Click\"] = function(self,x,y)\n            on = not on\n            Tween.RunTween(self,{\n                -- \ud2b8\uc708 \uc635\uc158\uc785\ub2c8\ub2e4. \uc544\ub798\uc5d0\uc11c \uc124\uba85\ub429\ub2c8\ub2e4\n                Easing = Tween.Easing.Expo;\n                Direction = Tween.Directions.Out;\n                Time = 1;\n            },{\n                -- \ud2b8\uc708\ud560 \ubaa9\ud45c \ud504\ub85c\ud37c\ud2f0\uc785\ub2c8\ub2e4\n                Position = on\n                    and UDim2.fromOffset(200,100)\n                    or UDim2.fromOffset(80,100);\n            })\n        end;\n    };\n}\n\nMount(ScreenGUI, Store.GetObejct(\"mainFrame\"))\n
"},{"location":"tutorial/6_tween/#_2","title":"\ud2b8\uc708 \uc635\uc158","text":"

\ud2b8\uc708\uc5d0\ub294 \ud2b8\uc708 \uc635\uc158\uc774 \ub4e4\uc5b4\uac00\uba70, \uc5ec\uae30\uc5d0\ub294 \ud2b8\uc708\uc758 \ubc29\ud5a5, \uac00\uac10\uc18d, \uc2dc\uac04 \ub4f1\uc744 \uc124\uc815\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub123\uc744 \uc218 \uc788\ub294 \ud2b8\uc708 \uc635\uc158\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.

OPTION Time:number?

\ud2b8\uc708\uc758 \ucd1d \uae38\uc774\ub97c \uc815\ud569\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 1\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

OPTION Easing:string|(index:number)->number?

\ud2b8\uc708\uc758 \uac00\uac10\uc18d \uc815\ub3c4\ub97c \uacb0\uc815\ud569\ub2c8\ub2e4. \ubb38\uc790\uc5f4 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uac70\ub098, Tween.Easings.Linear\uc640 \uac19\uc774 \uc5f4\uac70\ud615 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud639\uc740 \ud544\uc694\uc5d0 \ub530\ub77c \ud568\uc218\ub97c \uc9c0\uc815\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ud568\uc218\ub97c Easing \uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \uccab\ubc88\uc9f8 \uc778\uc790\ub85c 1\ucc28 \uc9c4\ud589\ub3c4 (Linear, 0 \uc5d0\uc11c 1 \uc0ac\uc774\uc758 \uac12) \uac12\uc774 \uc8fc\uc5b4\uc9c0\uba70, \uacc4\uc0b0 \uacb0\uacfc\ub85c \uc2e4\uc81c \uc801\uc6a9\ub420 \uc704\uce58\ub97c \ubc18\ud658\ud574\uc57c\ud569\ub2c8\ub2e4. \ubc18\ud658\uac12\uc740 \uc74c\uc218\uc774\uac70\ub098 1 \ubcf4\ub2e4 \ud074 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 Exp2\uac00 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

type Easing =\n\"Linear\" // \uc544\ubb34\ub7f0 \uac00\uac10\uc18d\uc774 \uc5c6\ub294 1\ucc28\ud615\n|\"Quint\" // 5 \uc81c\uacf1\n|\"Quart\" // \ub124\uc81c\uacf1\n|\"Cubic\" // \uc138\uc81c\uacf1\n|\"Quad\" // \uc81c\uacf1\n|\"Sin\" // \uc0ac\uc778 \ud30c\ud615\n|\"Circle\" // \uc0ac\ubd84\uc6d0\n|\"Expo\" // \uc9c0\uc218\ud615\n|\"Elastic\" // \ud0c4\uc131\n|\"Bounce\" // \ud280\uc5b4\uc624\ub984\n|\"Back\" // \ub4a4\ub85c \uac00\uac10\uc18d\n|\"Exp2\" // \ub35c \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 to 2\n|\"Exp4\" // \ub354 \uac00\ud30c\ub978 \uc9c0\uc218 i=exp(x)/max, x=-4 ~ 4\n|EasingFunction?;\n
\ud568\uc218\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \uc124\uba85\uacfc \ubbf8\ub9ac\ubcf4\uae30\ub294 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694

OPTION Direction:string?

\ud2b8\uc708\uc774 \uc9c4\ud589\ub418\ub294 \ubc29\ud5a5\uc785\ub2c8\ub2e4. \ubb38\uc790\uc5f4 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uac70\ub098, Tween.Directions.Out\uacfc \uac19\uc774 \uc5f4\uac70\ud615 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ubb34 \uac12\ub3c4 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 Out\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

type Direction =\n// \ucd08\ubc18\uc5d0 \uac00\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9c0\uba70, \ud6c4\ubc18\uc5d0 \ub290\ub824\uc9d1\ub2c8\ub2e4.\n\"Out\"\n// \ucd08\ubc18\uc5d0\ub294 \ub290\ub9ac\uba70, \uc810\uc810 \uac00\uc18d\uc774 \ub298\uc5b4\ub0a9\ub2c8\ub2e4.\n|\"In\"\n//\uc911\uac04\uc5d0\uc11c \uac00\uc7a5 \ube60\ub978 \uc18d\ub3c4\ub97c \uac00\uc9c0\uba70, \ud6c4\ubc18 \ucd08\ubc18 \ubaa8\ub450 \uac10\uc18d\uc774 \uc774\ub8e8\uc6cc\uc9d1\ub2c8\ub2e4.\n|\"InOut\"\n
\ubc29\ud5a5\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \uc124\uba85\uacfc \ubbf8\ub9ac\ubcf4\uae30\ub294 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694

OPTION CallBack:{[number|\"*\"|string]:(Item:any, Alpha:number, AbsolutePercent:number)->()}?

\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uc2e4\ud589\uc911\uc778 \ub3c4\uc911\uc5d0 \ud568\uc218\ub97c \uc2e4\ud589\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud2b8\uc708\uc758 \uc9c4\ud589 \uc815\ub3c4\uc5d0 \ub530\ub77c\uc11c \ud55c\ubc88 \ud568\uc218\uac00 \uc2e4\ud589\ub418\uac70\ub098 \ud2b8\uc708 \uc9c4\ud589\uc911 \uacc4\uc18d\ud574\uc11c \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc778\ub371\uc2a4\uac00 \uc22b\uc790\uc778 \uacbd\uc6b0 \ud574\ub2f9 \uc9c0\uc810\uc744 \ub118\uc744 \ub54c \ud568\uc218\uac00 \uc2e4\ud589\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc73c\uba70, \"*\" \ub97c \uc778\ub371\uc2a4\ub85c \uc0ac\uc6a9\ud558\uba74 \ubaa8\ub4e0 \ubd80\ubd84\uc5d0\uc11c \ud568\uc218\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4. \ud568\uc218\uc5d0\ub294 \ud3b8\uc758\uc0c1 \ud2b8\uc708\uc744 \ud558\uace0\uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \uc704\uce58\uac12, \uc2dc\uac04\ub9cc\uc744 \uace0\ub824\ud55c 1\ucc28 \uc704\uce58\uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.

OPTION OnStepped:(Item:any, Alpha:number, AbsolutePercent:number)->()?

CallBack \uc5d0 \"*\" \ub97c \ub123\uc740\uac83\uacfc \ub3d9\uc77c\ud55c \ud6a8\uacfc\ub97c \uac00\uc9c0\ub294 \ubcc4\uce6d\uc785\ub2c8\ub2e4

OPTION Ended:(Item:any, Alpha:number, AbsolutePercent:number)->()?

CallBack \uc5d0 1\uc744 \ub123\uc740\uac83\uacfc \ub3d9\uc77c\ud55c \ud6a8\uacfc\ub97c \uac00\uc9c0\ub294 \ubcc4\uce6d\uc785\ub2c8\ub2e4

OPTION Getter:(Item:any, Property:string)->any?

\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uac12\uc744 \uc5bb\uc73c\ub824 \ud560 \ub54c \uc0ac\uc6a9\ud560 \ud568\uc218\uc785\ub2c8\ub2e4. \ud568\uc218\uc5d0 \ud2b8\uc708\ud558\uace0 \uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \ud504\ub85c\ud37c\ud2f0 \uc774\ub984\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.

Warning

register:Tween() \uc640 \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

OPTION Getter:(Item:any, Property:string, Value:Lerpable)->any?

\uc120\ud0dd\uc801\uc778 \ud544\ub4dc\uc774\uba70, \ud2b8\uc708\uc774 \uac12\uc744 \uc124\uc815\ud558\ub824 \ud560 \ub54c \uc0ac\uc6a9\ud560 \ud568\uc218\uc785\ub2c8\ub2e4. \ud568\uc218\uc5d0 \ud2b8\uc708\ud558\uace0 \uc788\ub294 \uc624\ube0c\uc81d\ud2b8, \ud504\ub85c\ud37c\ud2f0 \uc774\ub984, \uc124\uc815\ud560 \uac12\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.

Warning

register:Tween() \uc640 \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

"},{"location":"tutorial/6_tween/#_3","title":"\ud2b8\uc708 \ud568\uc218","text":"

Quad \uc758 \ud2b8\uc708\uc5d0\ub294 \ud2b8\uc708\uc744 \uba48\ucd94\uac70\ub098 \ud2b8\uc708\uc911\uc778\uc9c0 \ud655\uc778\ud558\ub294 \ub4f1\uc758 \uc791\uc5c5\uc744 \ud560 \uc218 \uc788\ub294 \uc5ec\ub7ec \ud568\uc218\ub4e4\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4.

"},{"location":"tutorial/7_quadProperty/","title":"QuadProperty - \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0","text":"\uc8fc\uc758\uc0ac\ud56d

\ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0\ub294 Tween \uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 register\uc758 :Tween()\uc758 \uacbd\uc6b0 \ud638\ud658\ub418\ubbc0\ub85c, \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0 \uac12\uc744 \ud2b8\uc708\ud558\ub824\uba74 \ud5a5\ud6c4 \uc124\uba85\ub418\ub294 register \uc640 \ud568\uae68 \uc0ac\uc6a9\ud574\uc57c\ud569\ub2c8\ub2e4.

Tween.RunTween, Tween.RunTweens \uc640\ub294 \uac19\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

"},{"location":"tutorial/7_quadProperty/#_1","title":"\ud2b9\uc218\ud55c \ud504\ub85c\ud37c\ud2f0","text":"

Quad \uc5d0\uc11c\ub294 \ud3b8\ub9ac\uc131\uc744 \uc704\ud574 \uc77c\ubd80 \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ubaa8\ub4e0 \ud2b9\uc218 \ud504\ub85c\ud37c\ud2f0\ub294 \ud5a5\ud6c4 \uc18c\uac1c\ub418\ub294 register\uc640 \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal ImageFrame = Class \"ImageFrame\"\nImageFrame.BackgroundTransparency = 1\n\nFrame \"mainFrame\" {\n    Size = UDim2.fromOffset(200,200);\n    PaddingAllOffset = 50; -- Padding \uc744 50 \uc529 \ubaa8\ub4e0 \ubc29\ud5a5\uc73c\ub85c \uc90d\ub2c8\ub2e4\n    BackgroundColor3 = Color3.fromRGB(40,40,40);\n    ImageFrame {\n        ImageColor3 = Color3.fromRGB(60,60,60);\n        RoundSize = 16; -- \uc774\ubbf8\uc9c0\ub85c \ub77c\uc6b4\ub4dc \ud504\ub808\uc784\uc744 \ub9cc\ub4ed\ub2c8\ub2e4\n        Size = UDim2.fromScale(1,1);\n        ImageFrame {\n            BackgroundColor3 = Color3.fromRGB(80,80,80);\n        };\n    };\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n

\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud504\ub85c\ud37c\ud2f0\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.

RoundSize:number?

ImageLabel, ImageButton \uc5d0\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc18d\uc131\uc785\ub2c8\ub2e4. \uc6d0\ud615 \uc774\ubbf8\uc9c0\uc5d0 Slice\ub97c \uc774\uc6a9\ud574 \ub465\uadfc \ud504\ub808\uc784\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c UICorner\ubcf4\ub2e4 \ubd80\ub4dc\ub7ec\uc6b4 \ucf54\ub108\ud6a8\uacfc\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.

Corner:number?

\ubaa8\ub4e0 \ub85c\ube14\ub85d\uc2a4 UI\uc624\ube0c\uc81d\ud2b8\uc5d0 \uc801\uc6a9\ub429\ub2c8\ub2e4. UICorner\ub97c \uc774\uc6a9\ud574 \ubaa8\uc11c\ub9ac \ubd80\ubd84\uc744 \ub465\uae00\uac8c \ub9cc\ub4ed\ub2c8\ub2e4. \uc790\uc2dd \uc624\ube0c\uc81d\ud2b8\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

PaddingAll:UDim?

UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. \uc0c1\ud558\uc88c\uc6b0 \ubaa8\ub450 \uac19\uc740 \uac12\uc73c\ub85c \uc801\uc6a9\ub429\ub2c8\ub2e4. PaddingAllOffset \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

PaddingAllOffset:number?

UIPadding\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. PaddingAll\uacfc \uac19\uc740 \ubc29\ubc95\uc73c\ub85c \uc791\ub3d9\ud558\ub098, Offset\uac12\ub9cc \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. PaddingAll \uacfc \ud568\uae68 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.

Scale:number?

UIScale\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. UIScale.Scale \uacfc \uac19\uc740 \ud6a8\uacfc\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4

"},{"location":"tutorial/8_register/","title":"Register - \uac12 \ubcc0\uacbd \uc5f0\ub3d9","text":"\uc77d\uae30 \uc804...

\ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Store.GetStore \uac00 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Store.GetStore \ub294 \uacf5\uc720\ub429\ub2c8\ub2e4

"},{"location":"tutorial/8_register/#_1","title":"\ub808\uc9c0\uc2a4\ud130","text":"

\ub808\uc9c0\uc2a4\ud130\ub294 \ud55c \uac12\uc774 \ubcc0\uacbd\ub420 \ub54c, \uadf8 \uac12\uc744 \uc0ac\uc6a9\ud55c \uacf3\uc774 \uc5c5\ub370\uc774\ud2b8 \ub420 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4e4\uc5b4\uc8fc\ub294 Quad \uc758 \uc8fc\uc694 \uae30\uc220\uc785\ub2c8\ub2e4. \ucd94\ud6c4 \uc124\uba85\ub420 Class.Extend \uc640\ub3c4 \uac19\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.

\ub808\uc9c0\uc2a4\ud130\ub294 \uc774\ub7ec\ud55c \uc2dc\ub098\ub9ac\uc624\uc5d0\uc11c \uc0ac\uc6a9\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

  1. UI \uc758 \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub97c \ud55c\ubc88\uc5d0 \ud398\uc774\ub4dc \uc544\uc6c3 \ud639\uc740 \ud398\uc774\ub4dc \uc778 \uc2dc\ud0a4\ub294 \uacbd\uc6b0.
  2. \uac00\ubcc0 \ud06c\uae30\uc758 UI \ub97c \uc5c5\ub370\uc774\ud2b8 \uc2dc\ud0a4\ub294 \uacbd\uc6b0.
  3. \uc5ec\ub7ec \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \ud55c\uaebc\ubc88\uc5d0 \ud2b8\uc708\uc2dc\ud0a4\ub294 \uacbd\uc6b0.
  4. \ub2e4\ud06c\ud14c\ub9c8/\ud654\uc774\ud2b8\ud14c\ub9c8 \ubcc0\uacbd\ud560 \uc218 \uc788\uac8c \ub9cc\ub4dc\ub294 \uacbd\uc6b0.

\uc774\uc678\uc5d0\ub3c4 \ub808\uc9c0\uc2a4\ud130\uc758 \ud65c\uc6a9 \ubc29\ubc95\uc740 \ubb34\uad81\ubb34\uc9c4\ud569\ub2c8\ub2e4. \ub808\uc9c0\uc2a4\ud130\uc758 \uc0ac\uc6a9\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.

local myStore = Store.GetStore(\"myStore\")\nmyStore.color = Color3.fromRGB(255,255,255)\nFrame { BackgroundColor3 = myStore \"color\" }\n-- \uc5f0\ub3d9\ub41c \ud504\ub808\uc784\ub3c4 \uc5c5\ub370\uc774\ud2b8 \ub429\ub2c8\ub2e4\nmyStore.color = Color3.fromRGB(0,0,0)\n
  1. \uc2a4\ud1a0\uc5b4\ub97c \uc0dd\uc131\ud568.
  2. \uae30\ubcf8 \uac12\uc744 \uc124\uc815\ud568.
  3. \uc2a4\ud1a0\uc5b4\ub97c \ud638\ucd9c\ud574 \ub808\uc9c0\uc2a4\ud130\ub97c \uc5bb\uc5b4 \ub4f1\ub85d\ud568.

\uc608\uc2dc \ucf54\ub4dc\ub85c \uc815\ud655\ud558\uac8c \ud655\uc778\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\n-- \ub808\uc9c0\uc2a4\ud130\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub294 \ud14c\uc774\ube14\uc744 \ub9cc\ub4ed\ub2c8\ub2e4.\n-- \uc5ec\uae30\uc5d0 \ub2f4\uc544\ub0b4\ub294 \uac12\uc744 \uc5c5\ub370\uc774\ud2b8 \ud558\ub294 \uacbd\uc6b0 \ub808\uc9c0\uc2a4\ud130\ub85c \uc5f0\uacb0\ub41c\n-- \uc624\ube0c\uc81d\ud2b8\ub4e4\ub3c4 \uac19\uc774 \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4.\nlocal myStore = Store.GetStore(\"myStore\")\nlocal TextLabel = Class \"TextLabel\"\n\nmyStore.Text = \"0 \ucd08 \uc9c0\ub0a8\"\nmyStore.Color = Color3.fromRGB(255,100,255)\n\nTextLabel \"mainLabel\" {\n    Size = UDim2.fromOffset(100,200);\n    -- myStore \uc758 Text \uac12\uc774 \ubcc0\uacbd\ub428\uc744 \ucd94\uc801\ud558\uace0, Text \uac12\uc744\n    -- \uc5c5\ub370\uc774\ud2b8 \uc2dc\ud0b5\ub2c8\ub2e4.\n    Text = myStore \"Text\";\n\n    -- \uc774\uac83\uc740 \ub808\uc9c0\uc2a4\ud130\ub97c \uc0ac\uc6a9\ud558\ub294\uac83\uc774 \uc544\ub2c8\ub77c \ub2e8\uc21c\ud788 \uac12\ub9cc\n    -- \ubd88\ub7ec\uc640 \ub123\uc5b4\uc8fc\ub294 \uac83\uc785\ub2c8\ub2e4. \uc790\ub3d9 \uc5c5\ub370\uc774\ud2b8\uac00 \uac00\ub2a5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n    BackgroundColor3 = myStore.Color;\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainLabel\"))\n\n-- \ubc14\uafb8\ub354\ub77c\ub3c4 \ub808\uc9c0\uc2a4\ud130\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc544 \ubc18\uc601\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\nmyStore.Color = Color3.fromRGB(255,255,255)\n\nlocal Count = 1\nwhile task.wait(1) do\n    -- \uac12\uc744 \uc5c5\ub370\uc774\ud2b8 \ud569\ub2c8\ub2e4. \ud14d\uc2a4\ud2b8 \ub77c\ubca8\ub3c4\n    -- \uc790\ub3d9\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8 \ub429\ub2c8\ub2e4.\n    myStore.Text = Count .. \" \ucd08 \uc9c0\ub0a8\"\n    Count = Count + 1\nend\n
"},{"location":"tutorial/8_register/#_2","title":"\ub808\uc9c0\uc2a4\ud130 \uba54\uc18c\ub4dc","text":"

\ub808\uc9c0\uc2a4\ud130\uc5d0\ub294 \uc5ec\ub7ec\uac00\uc9c0 \uba54\uc18c\ub4dc\uac00 \ub2f4\uaca8\uc788\uc2b5\ub2c8\ub2e4. \uc774 \uba54\uc18c\ub4dc\ub97c \uc0ac\uc6a9\ud558\uba74 \ub808\uc9c0\uc2a4\ud130\ub97c \ubcf4\ub2e4 \ub354 \ub2e4\uc591\ud558\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

register \ud2b9\uc218 \uba54\uc18c\ub4dc\uac00 \uc801\uc6a9\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.

:Add(value:any)->register

\uac12\uc5d0 \ub354\ud558\uae30\ub97c \ucde8\ud569\ub2c8\ub2e4. \uc74c\uc218\ud615\ud0dc\uac00 \uc81c\uacf5\ub418\ub294 \uacbd\uc6b0 \ube7c\uae30 \ucc98\ub7fc \uc791\ub3d9\ud569\ub2c8\ub2e4. number, Udim, UDim2, Color3, Vector2 \ub4f1 \ub354\ud560 \uc218 \uc788\ub294 \ubaa8\ub4e0\uac83\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4

-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.pos = UDim2.fromOffset(100,0)\n\nFrame \"mainFrame\" {\n    Position = myStore \"pos\":Add(UDim2.fromOffset(0,100));\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nwhile true do\n    myStore.pos = myStore.pos + UDim2.fromOffset(10,0)\n    task.wait(2)\nend\n

\uc8fc\uc758

\uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4

:With((store:valueStore, newValue:any, key:string)->())->register

\ud568\uc218 \ub610\ub294 \ud14c\uc774\ube14\uc5d0\uc11c \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4. Add \ubcf4\ub2e4 \ub098\uc911\uc5d0 \uc218\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4

\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \ud568\uc218\uc608\uc81c - \ud14c\uc774\ube14
myStore \"size\":With(function (_,value)\n    return value * 2\nend)\n

width \uac12\uc5d0 \ub9de\ucdb0 \uc790\ub3d9\uc73c\ub85c UI \uac00 \uc5c5\ub370\uc774\ud2b8\ub418\ub3c4\ub85d \ub9cc\ub4ed\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.topbarSize = 60\nmyStore.width = 200\n\n-- \ub808\uc9c0\uc2a4\ud130\ub97c \ubcc0\uc218\ub85c \ub450\uace0 \uc0ac\uc6a9\ud569\ub2c8\ub2e4\nlocal listItemSize = myStore \"width\":With(function()\n    return UDim2.fromOffset(myStore.width,60)\nend)\n\nFrame \"mainFrame\" {\n    Class \"UIListLayout\" { SortOrder = Enum.SortOrder.LayoutOrder };\n\n    -- \uc0ac\uc774\uc988\uac00 width \uc5d0 \ub9de\uac8c \uc5c5\ub370\uc774\ud2b8\ub429\ub2c8\ub2e4\n    Size = myStore \"width\":With(function ()\n        return UDim.fromOffset(store.width,400)\n    end);\n\n    Frame \"Topbar\" {\n        LayoutOrder = 1;\n        BackgroundColor3 = Color3.fromRGB(255,0,0);\n        -- \uc774\ub807\uac8c \uc5ec\ub7ec \uac12\uc744 \ubb36\uc5b4\uc11c \ub450 \uac12\uc774 \ubcc0\uacbd\ub428, \ud639\uc740 \uadf8\uc774\uc0c1\uc744\n        -- \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n        Size = myStore \"topbarSize,width\":With(function()\n            return UDim2.fromOffset(myStore.width,myStore.topbarSize)\n        end);\n    }\n    Frame \"ListItem\" {\n        LayoutOrder = 2;\n        BackgroundColor3 = Color3.fromRGB(0,255,0);\n        Size = listItemSize;\n    };\n    Frame \"ListItem\" {\n        LayoutOrder = 3;\n        BackgroundColor3 = Color3.fromRGB(0,0,255);\n        Size = listItemSize;\n    };\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- width \uac12\uc744 \ubcc0\uacbd\ud574\ubcf4\uc138\uc694\nwhile true do\n    myStore.width = myStore.width + 10\n    task.wait(1)\nend\n

colors \ud14c\uc774\ube14 \uc548\uc5d0 \uc788\ub294 \uc0c9\uae54\ub4e4\uc744 \ub3cc\uc544\uac00\uba70 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nlocal colors = {\n    Color3.fromRGB(255,255,255);\n    Color3.fromRGB(255,255,0);\n    Color3.fromRGB(0,255,255);\n    Color3.fromRGB(255,0,255);\n    Color3.fromRGB(255,0,0);\n    Color3.fromRGB(0,255,0);\n    Color3.fromRGB(0,0,255);\n}\nmyStore.color = 1\n\nFrame \"mainFrame\" {\n    Size = UDim2.fromOffset(200,200);\n    -- colors \uc5d0\uc11c \uc778\ub371\uc2f1\ud574 \uac12\uc744 \uac00\uc838\uc635\ub2c8\ub2e4\n    BackgroundColor3 = myStore \"color\":With(colors);\n}\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\n-- \uc778\ub371\uc2a4\ub97c \uc21c\ud68c\ud569\ub2c8\ub2e4\nwhile task.wait(1) do\n    myStore.color = (i-1)%(#colors)+2\nend\n
\uc8fc\uc758

\uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4

:Tween(options:TweenOptions)->register

\ud2b8\uc708\uc744 \uc774\uc6a9\ud574 \ubcc0\uacbd\uc0ac\ud56d\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4(\ucc98\uc74c \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\uc2dc\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc74c) \uc635\uc158\uc740 Tween \ubb38\uc11c\uc5d0 \ub098\uc640\uc788\ub294 \uc635\uc158\uacfc \uac19\uc2b5\ub2c8\ub2e4.

\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \ud55c\uaebc\ubc88\uc5d0 \uc774\ub3d9
-- Tween \uc635\uc158\uc744 \ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nmyStore \"size\":Tween{ Time = 2 }\n

\ud504\ub808\uc784\uc744 \ud55c\uaebc\ubc88\uc5d0 \uc6c0\uc9c1\uc785\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\nlocal Style = Quad.Style\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\nmyStore.pos = UDim2.fromOffset(50,0)\nStyle \"TweenFrame\" {\n    Size = UDim2.fromOffset(50,50);\n    BackgroundColor3 = Color3.fromRGB(255,100,255);\n}\n\nFrame \"mainFrame\" {\n    BackgroundColor3 = Color3.fromRGB(255,255,255);\n    Size = UDim2.fromOffset(500,500);\n    Frame \"TweenFrame\" {\n        Position = myStore \"pos\":Tween{Time = 2};\n    };\n    Frame \"TweenFrame\" {\n        Position = myStore \"pos\"\n            :Add(UDim2.fromOffset(0,100))\n            :Tween{Time = 2};\n    };\n    Frame \"TweenFrame\" {\n        Position = myStore \"pos\"\n            :Add(UDim2.fromOffset(0,200))\n            :Tween{Time = 2};\n    };\n    Frame \"TweenFrame\" {\n        Position = myStore \"pos\"\n            :Add(UDim2.fromOffset(0,300))\n            :Tween{Time = 2};\n    }\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\nlocal on = false\nwhile true do\n    on = not on\n    myStore.pos = on and UDim2.fromOffset(400,0) or UDim2.fromOffset(50,0)\n    task.wait(1.5) -- \ud2b8\uc708\uc740 \ub36e\uc5b4 \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n    -- \ub530\ub77c\uc11c 2 \ucd08\uc778 \uae38\uc774\ubcf4\ub2e4 \ub354 \ube68\ub9ac \ubc14\uafd4\ub3c4 \uc624\ub958\uac00 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\nend\n
\uc8fc\uc758

\uad6c\uc870\uc758 \ubcf5\uc7a1\uc131\uc744 \ud53c\ud558\uace0\uc790, \uc5ec\ub7ec\ubc88 \ud638\ucd9c\uc2dc \uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ud638\ucd9c\ub41c \uac83\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4

:Default(value:any)->register

\uae30\ubcf8\uac12\uc744 \uc815\ud569\ub2c8\ub2e4. \ub9cc\uc57d \uac12\uc774 nil \uc778 \uacbd\uc6b0 \uc774 \uac12\uc744 \uc0ac\uc6a9\ud558\uac8c \ub429\ub2c8\ub2e4. Add \ub098 With \ub4f1 \ub2e4\ub978\uac83\uc5d0 \uc601\ud5a5\ubc1b\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.

-- \uc6a9\ubc95\nlocal ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Class = Quad.Class\nlocal Mount = Quad.Mount\n\nlocal Frame = Class \"Frame\"\nlocal myStore = Store.GetStore(\"myStore\")\n\nFrame \"mainFrame\" {\n    Size = UDim2.fromOffset(200,200);\n    -- color \uac12\uc774 \uc5c6\uc73c\ubbc0\ub85c Default \uc548\uc758 \uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.\n    BackgroundColor3 = myStore \"color\"\n        :Default(Color3.fromRGB(255,0,0));\n}\n\nMount(ScreenGUI, Store.GetObject(\"mainFrame\"))\n\ntask.wait(5)\nmyStore.color = Color3.fromRGB(0,255,0)\n

\uc8fc\uc758

:Register(<INPUT>(store:valueStore, newValue:any, key:string)->())->INPUT

\ub808\uc9c0\uc2a4\ud130\uc5d0 \ud568\uc218\ub97c \ub4f1\ub85d\ud569\ub2c8\ub2e4. \uac12\uc774 \ubcc0\uacbd\ub418\uba74 \ud568\uc218\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4. \uccab\ubc88\uc9f8 \uac12\uc5d0\ub294 \ud3b8\uc758\uc0c1 \uc2a4\ud1a0\uc5b4 \uac12\uc774 \uc81c\uacf5\ub418\uba70, \uc0c8\ub85c\uc6b4 \uac12\uacfc, \ubc14\ub010 \uac12\uc5d0 \ub300\ud55c \ud0a4\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4

newValue \uc5d0\ub294 :Add, :With, :Tween, :Default \uac00 \ub530\ub85c \uacc4\uc0b0\ub418\uc9c0 \uc54a\uc73c\uba70, \uc124\uc815\ub41c \uac12\uc744 \uc544\ubb34 \uac00\uacf5 \uc5c6\uc774 \uc81c\uacf5\ud569\ub2c8\ub2e4

\uac04\ub7b5\ud55c \uc6a9\ubc95\uc608\uc81c - \uc5ec\ub7ec \ubcc0\uacbd\uc0ac\ud56d \ucd94\uc801
myStore.test = 1\n-- \ubc18\ud658 \uac12\uc740 \uc785\ub825\uc73c\ub85c \ub123\uc740 \ud568\uc218\uc785\ub2c8\ub2e4. !\uaf2d \uc800\uc7a5\ud574\uc57c\ud569\ub2c8\ub2e4\n-- :Register \ub294 \ud568\uc218\uac00 \uc0ac\ub77c\uc9c0\uc9c0 \uc54a\ub3c4\ub85d \uac12\uc744 \uc720\uc9c0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\n-- \ub9cc\uc57d \ubc84\ub9b4 \uacbd\uc6b0 \uc77c\uc815 \uc2dc\uac04 \ub4a4 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nlocal func = myStore \"test\":Register(function(_,newValue)\n    -- \uac12 \ubcc0\uacbd\uc2dc \ucd9c\ub825\ub429\ub2c8\ub2e4\n    print(newValue)\nend)\nmyStore.test = 2\n

myStore.test1, myStore.test2 \uac00 \ubcc0\ud654\ud558\uba74 print \ud568\uc218\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.

local Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\n\nlocal myStore = Store.GetStore(\"myStore\")\n\nmyStore.test1 = 1\nmyStore.test2 = \"Hello\"\n\nlocal func = myStore \"test1,test2\":Register(function()\n    print(myStore.test1,myStore.test2)\nend)\n\nmyStore.test1 = 2\n
\uc8fc\uc758

Register \uc548\uc5d0 \ub4e4\uc5b4\uac04 \ud568\uc218\ub294 GC \uc548\uc815\uc131\uc744 \uc704\ud574\uc11c \uc57d\ud55c \ucc38\uc870\ub85c \uc800\uc7a5\ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c \ud568\uc218\ub97c \uc800\uc7a5\ud574\uc57c\ud569\ub2c8\ub2e4.

"},{"location":"tutorial/9_lang/","title":"Lang - \uc5b8\uc5b4\uad00\ub9ac","text":"\uc77d\uae30 \uc804...

\ubaa8\ub4c8 \uc124\uc815\uc2dc .Init() \ucc98\ub7fc QuadId \ub780\uc744 \ube44\uc6cc\ub450\ub294 \uacbd\uc6b0 Lang \uae30\ub2a5\uc774 \ucf54\ub4dc\ub97c \ub118\uc5b4 \uacf5\uc720\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 \ud558\uc9c0\ub9cc .Init(\"Project1\") \ucc98\ub7fc \uc544\uc774\ub514\ub97c \ubd80\uc5ec\ud558\ub294 \uacbd\uc6b0 \ub2e4\ub978 \ubaa8\ub4c8, \ub85c\uceec\uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \uac19\uc740 QuadId \ub97c \uac00\uc84c\ub2e4\uba74 Lang \uc740 \uacf5\uc720\ub429\ub2c8\ub2e4

"},{"location":"tutorial/9_lang/#_1","title":"\uc5b8\uc5b4\uad00\ub9ac","text":"

Quad \uc5d0\ub294 \uadc0\ucc2e\uc740 \uc5b8\uc5b4\uad00\ub9ac\ub97c \uc790\ub3d9\uc73c\ub85c \ud574\uc8fc\ub294 \uae30\ub2a5\uc774 \ub0b4\uc7a5\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 register \uc640 \uc5f0\ub3d9\ud574 \uc801\uc740 \uc904\uc758 \ucf54\ub4dc\ub85c \ubcc0\ud558\ub294 \ud14d\uc2a4\ud2b8\ub3c4 \uc5b8\uc5b4\uc5d0 \ub9de\uac8c \ucd9c\ub825\ub418\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.

\ubc88\uc5ed \ud14c\uc774\ube14\uc740 Lang.New(LangName:string,{ [Locale]: string|(options)->string }) \ub2e4\uc74c\uc744 \uc774\uc6a9\ud574 \ub9cc\ub4e4 \uc218 \uc788\uc73c\uba70. Lang(LangName:string)(options) \ub85c UI \uc5d0 \uc801\uc6a9\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4.

\uc6a9\ubc95\uc608\uc81c - \ub2e4\uc911\uc5b8\uc5b4 \uce74\uc6b4\ud130
-- \uc790\uc138\ud55c \uc124\uba85\uc740 \uc608\uc81c\ub97c \ucc38\uace0\ud558\uc138\uc694\nLang.New(\"Test\",{\n    [Lang.Locales.Korean] = \"{won} \uc6d0\";\n    [Lang.Locales.Default] = \"{won} Won\";\n})\nTextLabel {\n    Lang \"Test\" {\n        won = 100;\n    };\n}\n

1\ucd08\uac00 \uc9c0\ub0a0 \ub54c \ub9c8\ub2e4 \uce74\uc6b4\ud2b8\ub97c \uc99d\uac00\ud569\ub2c8\ub2e4. \uc601\uc5b4 \uc0ac\uc6a9\uc790\uc5d0\uac90 \uc601\uc5b4\ub97c, \ud55c\uad6d\uc5b4 \uc0ac\uc6a9\uc790\uc5d0\uac90 \ud55c\uad6d\uc5b4\ub97c \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.

local ScreenGUI = script.Parent\nlocal Quad = require(path.to.module).Init()\nlocal Store = Quad.Store\nlocal Mount = Quad.Mount\nlocal Event = Quad.Event\nlocal Lang = Quad.Lang\nlocal Class = Quad.Class\n\nlocal TextButton = Class \"TextButton\"\n\nlocal myStore = Store.GetStore(\"myStore\")\nmyStore.count = 0\n\nLang.New(\"TimePassed\",{\n    [Lang.Locales.Korean] = \"{count}\ucd08 \uc9c0\ub0ac\uc5b4\uc694\";\n    [Lang.Locales.Default] = function (options)\n        -- \ud568\uc218 \ub610\ud55c \ub4f1\ub85d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n        if options.count > 1 then\n            return (\"%d seconds passed\"):format(options.count)\n        else\n            return (\"%d second passed\"):format(options.count)\n        end\n    end;\n})\n\nTextButton \"mainButton\" {\n    Size = UDim2.fromOffset(100,100);\n    Text = Lang \"TimePassed\" {\n        -- count = 1 \uc77c\ubc18\uc801\uc778 \uac12\ub3c4 \uc0ac\uc6a9\uac00\ub2a5\ud569\ub2c8\ub2e4\n        count = myStore \"count\";\n    };\n    [Event \"MouseButton1Click\"] = function()\n        -- \ud074\ub9ad\uc2dc \uc5b8\uc5b4\uac00 \ubcc0\uacbd\ub429\ub2c8\ub2e4\n        if Lang.CurrentLocale == Lang.Locales.Default then\n            Lang.CurrentLocale = Lang.Locales.Korean\n        else\n            Lang.CurrentLocale = Lang.Locales.Default\n        end\n    end\n}\nMount(ScreenGUIk,Store.GetObject(\"mainButton\"))\n\nwhile task.wait(1) do\n    myStore.count = myStore.count + 1\nend\n
"},{"location":"tutorial/9_lang/#locale","title":"Locale \ubaa9\ub85d","text":"

\ub85c\ucf00\uc77c \uac12\ub4e4\uc740 Lang.Locales\uc5d0\uc11c \uac00\uc838\uc62c \uc218 \uc788\uc73c\uba70, \uc0ac\uc6a9\uac00\ub2a5\ud55c \ub85c\ucf00\uc77c \ubaa9\ub85d\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.

Default (default) English (en_us) Spanish (es_es) French (fr_fr) Indonesian (id_id) Italian (it_it) Japanese (ja_jp) Korean (ko_kr) Russian (ru_ru) Thai (th_th) Turkish (tr_tr) Vietnamese (vi_vn) Portuguese (pt_br) German (de_de) ChineseSimplified (zh_cn) ChineseTraditional (zh_tw) Bulgarian (bg_bg) Bengali (bn_bd) Czech (cs_cz) Danish (da_dk) Greek (el_gr) Estonian (et_ee) Finnish (fi_fi) Hindi (hi_in) Croatian (hr_hr) Hungarian (hu_hu) Georgian (ka_ge) Kazakh (kk_kz) Khmer (km_kh) Lithuanian (lt_lt) Latvian (lv_lv) Malay (ms_my) Burmese (my_mm) Bokmal (nb_no) Dutch (nl_nl) Filipino (fil_ph) Polish (pl_pl) Romanian (ro_ro) Ukrainian (uk_ua) Sinhala (si_lk) Slovak (sk_sk) Slovenian (sl_sl) Albanian (sq_al) Bosnian (bs_ba) Serbian (sr_rs) Swedish (sv_se) Arabic (ar_001)

"}]}