[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.88,0:00:06.00,Default,,0000,0000,0000,, Ta sẽ quay lại chương trình vẽ Winston, nhưng tôi đã thêm một số chữ vào đó. Dialogue: 0,0:00:06.00,0:00:11.07,Default,,0000,0000,0000,, Hãy xem, những gì ta muốn làm là đặt Winston bên dưới các nhãn này, Dialogue: 0,0:00:11.07,0:00:13.21,Default,,0000,0000,0000,, để thể hiện anh ấy ở mỗi thời điểm trong đời. Dialogue: 0,0:00:13.21,0:00:16.44,Default,,0000,0000,0000,, Lúc này anh ấy ở khắp mọi nơi. Đó là bởi ta đang gán Dialogue: 0,0:00:16.44,0:00:20.45,Default,,0000,0000,0000,, faceX và faceY cho các giá trị ngẫu nhiên bên trong hàm. Dialogue: 0,0:00:20.45,0:00:26.71,Default,,0000,0000,0000,, Ta muốn rằng "Đây là vị trí chính xác tôi muốn vẽ Winston" Dialogue: 0,0:00:26.71,0:00:30.32,Default,,0000,0000,0000,, Tôi muốn có thể chỉ định vị trí đó mỗi khi gọi hàm, Dialogue: 0,0:00:30.32,0:00:32.65,Default,,0000,0000,0000,, giống như cách ta làm với ellipse() và rect(). Dialogue: 0,0:00:34.05,0:00:40.46,Default,,0000,0000,0000,, Tôi muốn đặt Winston ở đây, đây và Winston ở đây, và Winston ở đây nữa, Dialogue: 0,0:00:40.46,0:00:43.62,Default,,0000,0000,0000,, và tôi không muốn chỉ là những vị trí ngẫu nhiên mỗi khi gọi hàm. Dialogue: 0,0:00:43.62,0:00:48.88,Default,,0000,0000,0000,, Để làm điều đó, ta phải chỉ định "tham số" cho hàm, Dialogue: 0,0:00:48.88,0:00:52.81,Default,,0000,0000,0000,, cả trong định nghĩa hàm - ở trên cùng ở đây - Dialogue: 0,0:00:52.81,0:00:57.30,Default,,0000,0000,0000,, và trong lời gọi hàm, ở đây, khi ta thực sự gọi nó. Dialogue: 0,0:00:57.30,0:01:02.21,Default,,0000,0000,0000,, Đối với drawWinston(), ta truyền vào faceX và faceY, Dialogue: 0,0:01:02.21,0:01:09.06,Default,,0000,0000,0000,, và sử dụng những giá trị mà ta truyền vào thay vì tạo ra chúng một cách ngẫu nhiên. Dialogue: 0,0:01:09.06,0:01:14.66,Default,,0000,0000,0000,, Hãy suy nghĩ về những gì ta sẽ truyền vào các hàm gọi ở đưới đây. Dialogue: 0,0:01:14.66,0:01:20.07,Default,,0000,0000,0000,, Ta đặt Winstons dưới mỗi chữ, vì vậy ta có thể muốn x và y của mỗi Dialogue: 0,0:01:20.07,0:01:24.49,Default,,0000,0000,0000,, Winston tương ứng với các giá trị ta đã truyền vào các hàm text(). Dialogue: 0,0:01:24.49,0:01:32.17,Default,,0000,0000,0000,, Có thể, nhỏ hơn 10 pixel với y. Cái đầu tiên sẽ là 10 và 30, Dialogue: 0,0:01:32.17,0:01:40.89,Default,,0000,0000,0000,, và sau đó có thể 200, 230 ... 10, 230 ... 200, 230. Dialogue: 0,0:01:40.89,0:01:44.86,Default,,0000,0000,0000,, Nó giống như tọa độ của chữ, tôi chỉ cần +10 cho mỗi y, ' Dialogue: 0,0:01:44.86,0:01:47.40,Default,,0000,0000,0000,, bởi tôi muốn nó thấp hơn một chút thôi. Dialogue: 0,0:01:49.98,0:01:55.30,Default,,0000,0000,0000,, Winston không di chuyển. Ta đã không cho hàm ở đây biết rằng Dialogue: 0,0:01:55.30,0:01:59.18,Default,,0000,0000,0000,, ta đang truyền tham số cho nó, vì vậy nó vẫn sử dụng các giá trị ngẫu nhiên này. Dialogue: 0,0:01:59.18,0:02:03.60,Default,,0000,0000,0000,, Để nói với hàm này, "Thay vào đó anh sẽ cung cấp cho chú thông tin này". Dialogue: 0,0:02:03.60,0:02:08.40,Default,,0000,0000,0000,, ta cần đặt tên tham số bên trong dấu ngoặc đơn. Dialogue: 0,0:02:08.40,0:02:14.11,Default,,0000,0000,0000,, Ta sẽ gọi nó là faceX và faceY, phân tách chúng bằng dấu phẩy, Dialogue: 0,0:02:14.11,0:02:20.70,Default,,0000,0000,0000,, Ta gọi như vậy là vì ta đang sử dụng nó để tham chiếu trong hàm. Dialogue: 0,0:02:20.70,0:02:23.47,Default,,0000,0000,0000,, Bằng cách đó, ta không phải viết lại phần còn lại của code. Dialogue: 0,0:02:23.47,0:02:28.81,Default,,0000,0000,0000,, Nhưng vẫn không có gì xảy ra; Winston vẫn còn ở khắp mọi nơi. Dialogue: 0,0:02:28.81,0:02:31.35,Default,,0000,0000,0000,, Nếu nhìn vào phần đầu của hàm, Dialogue: 0,0:02:31.35,0:02:35.26,Default,,0000,0000,0000,, ta vẫn ghi đè faceX và faceY với các giá trị ngẫu nhiên. Dialogue: 0,0:02:35.26,0:02:38.79,Default,,0000,0000,0000,, Vì vậy, tất cả những gì ta phải làm là xóa những dòng này đi. Dialogue: 0,0:02:38.79,0:02:45.46,Default,,0000,0000,0000,, Bây giờ, faceX và faceY đang được truyền vào hàm, Dialogue: 0,0:02:45.46,0:02:49.58,Default,,0000,0000,0000,, và nó đang dùng các giá trị được gọi ở đây. Dialogue: 0,0:02:49.58,0:02:55.31,Default,,0000,0000,0000,, Tôi đã không định vị chính xác Winston, vì quên rằng chữ đã được xác định vị trí Dialogue: 0,0:02:55.31,0:03:01.04,Default,,0000,0000,0000,, căn theo phía trên bên trái, và mặt được xác định vị trí theo tâm điểm. Dialogue: 0,0:03:01.04,0:03:06.38,Default,,0000,0000,0000,, Ta cần tiếp tục và điều chỉnh số má một chút ở đây, phải không? Dialogue: 0,0:03:06.38,0:03:12.61,Default,,0000,0000,0000,, Tôi cần phải đặt 'x' lên rất nhiều, và di chuyển nó, được rồi ... như vậy đó là những bước đi đầu tiên Dialogue: 0,0:03:12.61,0:03:18.03,Default,,0000,0000,0000,, Ta sẽ thực hiện và thay đổi những gì truyền vào hàm, Dialogue: 0,0:03:18.03,0:03:22.52,Default,,0000,0000,0000,, Ta không phải thay đổi định nghĩa hàm, Dialogue: 0,0:03:22.52,0:03:25.76,Default,,0000,0000,0000,, Nó sẽ luôn lấy bất cứ giá trị nào ta truyền vào. Dialogue: 0,0:03:25.76,0:03:28.39,Default,,0000,0000,0000,, Cũng giống như với ellipse() và rect(). Dialogue: 0,0:03:28.39,0:03:33.35,Default,,0000,0000,0000,, Tôi đã định vị nó, nhưng nhận thấy rằng Winston quá to. Dialogue: 0,0:03:33.35,0:03:35.76,Default,,0000,0000,0000,, Anh ta chồng chéo và không phù hợp. Dialogue: 0,0:03:35.76,0:03:39.02,Default,,0000,0000,0000,, Tôi đã viết code để vẽ anh ta trong một hàm, Dialogue: 0,0:03:39.02,0:03:42.37,Default,,0000,0000,0000,, Tôi có thể thay đổi kích thước của tất cả chúng cùng một lúc Dialogue: 0,0:03:42.37,0:03:45.44,Default,,0000,0000,0000,, bằng cách thay đổi dòng code vẽ hình elip. Dialogue: 0,0:03:45.44,0:03:50.63,Default,,0000,0000,0000,, Nếu ta đặt cho anh ta kích thước như 190, Winston sẽ ăn kiêng còn 190. Dialogue: 0,0:03:50.63,0:03:55.96,Default,,0000,0000,0000,, Bây giờ anh ta sẽ khỏe hơn và sau đó ta có thể tiếp tục điều chỉnh Dialogue: 0,0:03:55.96,0:04:01.90,Default,,0000,0000,0000,, Như vậy, tôi thực sự có thể đưa anh ta vào trong đó, phải không? Ngon. Dialogue: 0,0:04:01.90,0:04:08.53,Default,,0000,0000,0000,, Hãy xem xét lại những gì code này làm. Nó định nghĩa một hàm gọi là drawWinston() Dialogue: 0,0:04:08.53,0:04:14.67,Default,,0000,0000,0000,, và nói rằng hàm này có hai giá trị tên là faceX và faceY, Dialogue: 0,0:04:14.67,0:04:19.95,Default,,0000,0000,0000,, các giá trị này xuất hiện dưới dạng những biến ta có thể sử dụng ở bất kỳ đâu trong hàm, Dialogue: 0,0:04:19.95,0:04:23.06,Default,,0000,0000,0000,, giống như ta đã từng sử dụng các biến đã khai báo ở trên cùng Dialogue: 0,0:04:23.06,0:04:29.11,Default,,0000,0000,0000,, Và sau đó ta có thể gọi hàm này bất cứ khi nào mình muốn sau khi khai báo nó, Dialogue: 0,0:04:29.11,0:04:33.71,Default,,0000,0000,0000,, ta có thể truyền các giá trị khác nhau, để nó sử dụng các giá trị mới đó trong mỗi lần. Dialogue: 0,0:04:33.71,0:04:38.11,Default,,0000,0000,0000,, Bạn đã thấy những điều tuyệt vời về hàm. Ta có thể tiếp tục code Dialogue: 0,0:04:38.11,0:04:42.51,Default,,0000,0000,0000,, và nghĩ rằng sẽ rất hữu ích khi tái sử dụng, nhưng ta cũng có thể dùng các tham số để thể hiện Dialogue: 0,0:04:42.51,0:04:46.46,Default,,0000,0000,0000,, "Này, đây là điều gì đó ta có thể thay đổi trong code này, để tùy chỉnh." Dialogue: 0,0:04:46.46,0:04:49.40,Default,,0000,0000,0000,, Nó giống như một công thức. Bạn viết ra những chỉ dẫn chung, Dialogue: 0,0:04:49.40,0:04:52.81,Default,,0000,0000,0000,, và nếu bạn nhận ra rằng bạn đột nhiên cần có 4 Winstons thay vì 1, Dialogue: 0,0:04:52.81,0:04:55.94,Default,,0000,0000,0000,, bạn không phải bắt đầu lại, chỉ cần sửa đổi các hướng dẫn ban đầu Dialogue: 0,0:04:55.94,0:04:57.63,Default,,0000,0000,0000,, và nhân mọi thứ với 4. Dialogue: 0,0:04:57.63,0:00:00.00,Default,,0000,0000,0000,, Bây giờ bạn có thể bắt đầu suy nghĩ về các công thức trong code của mình rồi đấy! Ngon.