[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:01.06,0:00:04.07,Default,,0000,0000,0000,,讓我們繼續探索,我們還能利用物件做什麼。 Dialogue: 0,0:00:04.07,0:00:07.78,Default,,0000,0000,0000,,我們回到程式設計裡使用函數的教程。 Dialogue: 0,0:00:08.34,0:00:11.84,Default,,0000,0000,0000,,這程式有「繪製溫斯頓」的函數,\N它知道如何繪製溫斯頓, Dialogue: 0,0:00:11.84,0:00:14.59,Default,,0000,0000,0000,,於所指定的 X 和 Y 座標。 Dialogue: 0,0:00:14.68,0:00:18.13,Default,,0000,0000,0000,,在這裡,我們呼叫「繪製溫斯頓」四次。 Dialogue: 0,0:00:18.13,0:00:21.04,Default,,0000,0000,0000,,每次以不同組合的 X 和 Y 坐標。 Dialogue: 0,0:00:21.50,0:00:25.89,Default,,0000,0000,0000,,當我看到這四組「繪製溫斯頓」的呼叫程式, Dialogue: 0,0:00:25.91,0:00:31.03,Default,,0000,0000,0000,,是如此相似時,我就想到更方便的方式是, Dialogue: 0,0:00:31.03,0:00:35.80,Default,,0000,0000,0000,,如果我們能使用一個循環圈,\N然後在循環圈裡只叫它一次, Dialogue: 0,0:00:35.80,0:00:39.54,Default,,0000,0000,0000,,改變這 X 和 Y 每次循環迭代裡的座標。 Dialogue: 0,0:00:39.86,0:00:44.36,Default,,0000,0000,0000,,要做到這個,我們需要找到\N一種方法來儲存這些 X 和 Y 位置, Dialogue: 0,0:00:44.36,0:00:47.67,Default,,0000,0000,0000,,如此才能於一個陣列裡循環它。 Dialogue: 0,0:00:47.67,0:00:51.93,Default,,0000,0000,0000,,目前有兩組的值,所以我們可以有兩個陣列, Dialogue: 0,0:00:51.93,0:00:56.03,Default,,0000,0000,0000,,一個給 X 的座標和一個給 Y 的座標。 Dialogue: 0,0:00:56.03,0:01:01.26,Default,,0000,0000,0000,,X 的座標可能是 99、\N294、101、和 294。 Dialogue: 0,0:01:02.28,0:01:08.81,Default,,0000,0000,0000,,而 Y 的座標我們會有\N117,117,316、316。 Dialogue: 0,0:01:09.56,0:01:14.47,Default,,0000,0000,0000,,好了,現在我們可以循環那些\N有著我們循環變數 i = 0; Dialogue: 0,0:01:14.47,0:01:18.67,Default,,0000,0000,0000,,i < x 位置點長度; i++。 Dialogue: 0,0:01:18.67,0:01:22.30,Default,,0000,0000,0000,,如此,我們會按序循環每個\N在 x 位置的元素,我們會編寫: Dialogue: 0,0:01:22.30,0:01:29.38,Default,,0000,0000,0000,,「繪製溫斯頓(x 位置 [i],\Ny 位置 [i])」; Dialogue: 0,0:01:30.70,0:01:34.56,Default,,0000,0000,0000,,好,讓我們來看看利用刪除是否可行... Dialogue: 0,0:01:34.56,0:01:36.17,Default,,0000,0000,0000,,好棒,那是可行的。 Dialogue: 0,0:01:36.17,0:01:40.81,Default,,0000,0000,0000,,現在我們只要呼叫這個,只用這行代碼,\N來編輯「繪製溫斯頓」 Dialogue: 0,0:01:40.81,0:01:43.29,Default,,0000,0000,0000,,但它就會寫在每個 Dialogue: 0,0:01:43.29,0:01:45.41,Default,,0000,0000,0000,,「x 位置」陣列的位置裡。 Dialogue: 0,0:01:45.41,0:01:49.06,Default,,0000,0000,0000,,我們可以在這裡添加更多的值,例如 10, Dialogue: 0,0:01:49.06,0:01:57.82,Default,,0000,0000,0000,,那麼我們加 1,然後 1,\N然後 1,然後 100,然後 1。 Dialogue: 0,0:01:58.48,0:02:03.11,Default,,0000,0000,0000,,現在它看起來稍微有點亂。我不喜歡這樣, Dialogue: 0,0:02:03.11,0:02:08.06,Default,,0000,0000,0000,,因為這樣很難看得出來哪些 X 與哪些 Y 相關聯。 Dialogue: 0,0:02:11.02,0:02:14.76,Default,,0000,0000,0000,,我要能一眼就看清楚 X 和 Y 的配對組合。 Dialogue: 0,0:02:14.76,0:02:19.80,Default,,0000,0000,0000,,而不必確保我有完美地上下對齊它們, Dialogue: 0,0:02:19.80,0:02:21.09,Default,,0000,0000,0000,,例如,像是這樣。 Dialogue: 0,0:02:22.31,0:02:26.98,Default,,0000,0000,0000,,所以,我要找出不同的方式來儲存的這些位置。 Dialogue: 0,0:02:26.98,0:02:30.76,Default,,0000,0000,0000,,一個做法是,我們可以將它們儲存為物件。 Dialogue: 0,0:02:30.76,0:02:34.97,Default,,0000,0000,0000,,想想看,每個位置都有兩位信息: Dialogue: 0,0:02:34.97,0:02:39.81,Default,,0000,0000,0000,,就是 X 和 Y。所以,我們可以有\N一個具有 X 和 Y 屬性的物件, Dialogue: 0,0:02:39.81,0:02:44.76,Default,,0000,0000,0000,,然後我們有一個包含所有 \NX 和 Y 位置的陣列物件。 Dialogue: 0,0:02:44.76,0:02:45.96,Default,,0000,0000,0000,,讓我們就這麼做。 Dialogue: 0,0:02:45.96,0:02:51.13,Default,,0000,0000,0000,,將變數位置相等於陣列。 Dialogue: 0,0:02:51.13,0:02:56.11,Default,,0000,0000,0000,,但是,每個元素並不是一個號碼,\N而是一個物件。 Dialogue: 0,0:02:56.36,0:03:00.33,Default,,0000,0000,0000,,我們有了我們的大括號,然後我們說, Dialogue: 0,0:03:00.33,0:03:05.24,Default,,0000,0000,0000,,X: 99,Y: 117。 Dialogue: 0,0:03:05.32,0:03:08.92,Default,,0000,0000,0000,,好,我們現在有了其中一個位置在這裡。 Dialogue: 0,0:03:08.92,0:03:14.00,Default,,0000,0000,0000,,然後在這裡我們再添加一個。 Dialogue: 0,0:03:14.57,0:03:19.07,Default,,0000,0000,0000,,X 應該是 294,117, Dialogue: 0,0:03:19.07,0:03:24.27,Default,,0000,0000,0000,,第三個會是 101,316, Dialogue: 0,0:03:25.48,0:03:31.34,Default,,0000,0000,0000,,然後最後一個是294和316。 Dialogue: 0,0:03:31.67,0:03:34.88,Default,,0000,0000,0000,,好,現在我們有了一個陣列物件, Dialogue: 0,0:03:34.88,0:03:38.28,Default,,0000,0000,0000,,而且每個物件都有,\NX 和 Y 的屬性在裡面。 Dialogue: 0,0:03:38.47,0:03:44.71,Default,,0000,0000,0000,,在我們的循環圈裡,我們將更改\N它通過「位置點長度」的迭代。 Dialogue: 0,0:03:44.71,0:03:49.26,Default,,0000,0000,0000,,然後,我們會傳遞物件。 Dialogue: 0,0:03:49.26,0:03:54.01,Default,,0000,0000,0000,,現在它正傳遞所有的物件,\N但我們想要傳遞 X 和 Y, Dialogue: 0,0:03:54.01,0:03:59.10,Default,,0000,0000,0000,,所以我們需要\N位置 [i] 點 x 和位置 [i] 點 y。 Dialogue: 0,0:03:59.20,0:04:00.69,Default,,0000,0000,0000,,成功! Dialogue: 0,0:04:00.69,0:04:04.20,Default,,0000,0000,0000,,現在,我們可以刪除這些舊的陣列集群。 Dialogue: 0,0:04:04.56,0:04:09.72,Default,,0000,0000,0000,,太好了,這樣看起來就整齊多了,\N代碼更容易閱讀。 Dialogue: 0,0:04:09.72,0:04:12.93,Default,,0000,0000,0000,,不論何時,只要有容易閱讀的代碼\N都是較好的。 Dialogue: 0,0:04:13.18,0:04:16.74,Default,,0000,0000,0000,,這樣也會更容易做添加。\N所以,如果我要再添加一個, Dialogue: 0,0:04:16.74,0:04:23.45,Default,,0000,0000,0000,,我只需同時添加一對,\N我們可以說 X 是 200,Y 是 200, Dialogue: 0,0:04:23.45,0:04:25.67,Default,,0000,0000,0000,,中間在放一個小溫斯頓。 Dialogue: 0,0:04:26.54,0:04:27.60,Default,,0000,0000,0000,,很酷。 Dialogue: 0,0:04:27.93,0:04:31.30,Default,,0000,0000,0000,,現在,我要教你一些比這個更炫的東西。 Dialogue: 0,0:04:31.81,0:04:36.76,Default,,0000,0000,0000,,請注意,我們的函數目前接受兩個位數, Dialogue: 0,0:04:37.22,0:04:39.15,Default,,0000,0000,0000,,然後使用這兩個數字。 Dialogue: 0,0:04:39.15,0:04:42.16,Default,,0000,0000,0000,,我們可以更改我們的函數,\N讓它期待一個物件, Dialogue: 0,0:04:42.16,0:04:45.26,Default,,0000,0000,0000,,然後它在從該物件裡取得 X 和 Y。 Dialogue: 0,0:04:45.26,0:04:49.57,Default,,0000,0000,0000,,這意味著,在這裡我們可以只傳遞物件。 Dialogue: 0,0:04:49.74,0:04:51.17,Default,,0000,0000,0000,,讓我們來試試。 Dialogue: 0,0:04:51.17,0:04:54.07,Default,,0000,0000,0000,,我們傳遞了物件,現在就壞了。 Dialogue: 0,0:04:54.07,0:04:57.68,Default,,0000,0000,0000,,那是因為我們的函數,仍然是期待兩個物件, Dialogue: 0,0:04:57.68,0:05:00.53,Default,,0000,0000,0000,,而它只獲得一個。所以我們將它更改為 Dialogue: 0,0:05:00.53,0:05:05.28,Default,,0000,0000,0000,,它將獲得「臉位置」。\N現在,我們接到了一個錯誤訊息, Dialogue: 0,0:05:05.28,0:05:10.00,Default,,0000,0000,0000,,它表示「臉X」未被定義。\N那是因為之前我們是以論據在傳遞「臉X」, Dialogue: 0,0:05:10.00,0:05:12.93,Default,,0000,0000,0000,,但目前它並不存在,我們只會得到一個物件。 Dialogue: 0,0:05:12.93,0:05:19.50,Default,,0000,0000,0000,,所以,我們要做的,就是將物件裡X的位置, Dialogue: 0,0:05:19.50,0:05:21.26,Default,,0000,0000,0000,,儲存在「臉X」的變數裡。 Dialogue: 0,0:05:21.26,0:05:24.95,Default,,0000,0000,0000,,我們有這個物件,\N我們知道這個物件裡有一個X屬性, Dialogue: 0,0:05:24.95,0:05:28.46,Default,,0000,0000,0000,,所以我們只要將它存儲在「臉X」的變數裡。 Dialogue: 0,0:05:28.46,0:05:33.76,Default,,0000,0000,0000,,我們可以對 Y 做同樣的事情,\N這樣「臉 Y 等於臉位置點 y」。 Dialogue: 0,0:05:33.76,0:05:35.07,Default,,0000,0000,0000,,成功! Dialogue: 0,0:05:35.07,0:05:38.31,Default,,0000,0000,0000,,你也知道,其餘的那些函數\N會使用「臉X」和「臉Y」。 Dialogue: 0,0:05:38.31,0:05:39.97,Default,,0000,0000,0000,,我們必須確保拼寫的正確性, Dialogue: 0,0:05:39.97,0:05:42.06,Default,,0000,0000,0000,,如果寫的是 xx,,就會無效。 Dialogue: 0,0:05:42.06,0:05:48.15,Default,,0000,0000,0000,,因為那與我們陣列物件裡的並不一致。\N所以它需要能相配。 Dialogue: 0,0:05:48.66,0:05:52.01,Default,,0000,0000,0000,,這樣就滿整齊的。現在你可以有陣列物件, Dialogue: 0,0:05:52.01,0:05:54.42,Default,,0000,0000,0000,,你可以有附帶物件的函數。 Dialogue: 0,0:05:54.42,0:05:58.34,Default,,0000,0000,0000,,你會發現你的程式,變的非常強大, Dialogue: 0,0:05:58.34,0:06:00.78,Default,,0000,0000,0000,,因為它們數據的構建方式。 Dialogue: 0,0:06:00.78,0:06:04.19,Default,,0000,0000,0000,,特別是因為它常常將 X 和 Y 配對。 Dialogue: 0,0:06:04.19,0:06:05.46,Default,,0000,0000,0000,,我想你會發現, Dialogue: 0,0:06:05.46,0:06:09.29,Default,,0000,0000,0000,,它們在這兒的繪製及動畫程式裡,特別好用。 Dialogue: 0,0:06:09.29,0:06:11.46,Default,,0000,0000,0000,,所以,快試試吧!\N祝你玩得開心!