0:00:00.000,0:00:02.246 Chúng ta sẽ trở lại với Winston. 0:00:02.417,0:00:05.743 Giờ ta có cả biến 'x' và 'y' dành cho 0:00:05.801,0:00:07.257 vị trí của Winston. 0:00:07.397,0:00:09.240 Vì vậy, ta có thể di chuyển anh ta sang hai bên, 0:00:10.075,0:00:11.741 lên và xuống, woo! 0:00:12.088,0:00:13.328 Đẹp quá. 0:00:13.680,0:00:15.866 Bây giờ, hãy thiết lập lại giá trị các biến 0:00:16.056,0:00:19.227 thành 200 và 200 0:00:19.315,0:00:21.995 và xem lại cách chương trình hoạt động. 0:00:22.553,0:00:25.763 Vì vậy, từ chỗ này, ta đã có biến 'eyeSize'. 0:00:25.763,0:00:27.813 Nó dùng để điều chỉnh kích thước mắt, 0:00:27.815,0:00:29.766 bởi vì đôi mắt có chiều rộng 40 pixel 0:00:29.766,0:00:32.426 và cao 40 pixel. 0:00:32.470,0:00:35.437 Và rồi ta có các biến 'x' và 'y', 0:00:35.437,0:00:39.127 và đó là vị trí của tâm điểm khuôn mặt. 0:00:39.843,0:00:41.113 Và ta có thể thấy chúng được dùng 0:00:41.113,0:00:42.729 trong lệnh ellipse 0:00:42.729,0:00:44.579 để vẽ một vòng tròn lớn màu vàng. 0:00:45.921,0:00:47.422 Và sau đó ở dưới đây, 0:00:47.422,0:00:48.617 dành cho đôi mắt, 0:00:48.617,0:00:50.427 'x' và 'y' lại được dùng. 0:00:50.731,0:00:51.951 Và đây nữa, 0:00:52.009,0:00:53.669 đôi mắt được đặt ở vị trí 0:00:54.048,0:00:55.778 tương quan với tâm điểm của khuôn mặt. 0:00:55.787,0:00:57.877 Vì vậy, có lẽ nó lệch 0:00:58.026,0:00:58.996 50 pixel 0:00:59.293,0:01:00.933 về phía bên trái của tâm điểm 0:01:01.528,0:01:03.428 và cái này lệch 100 pixel 0:01:03.455,0:01:05.005 về phía bên phải của tâm điểm. 0:01:05.149,0:01:07.829 OK. Khá ổn. 0:01:07.865,0:01:09.365 và đó là lý do tại sao ta có thể 0:01:09.395,0:01:11.195 di chuyển Winston lên xuống. 0:01:11.236,0:01:13.192 Bây giờ, tôi còn muốn điều chỉnh 0:01:13.212,0:01:15.202 nhiều hơn cho khuôn mặt của Winston 0:01:15.202,0:01:16.662 với các biến. 0:01:16.662,0:01:17.912 Nhưng tôi vẫn muốn xem 0:01:17.912,0:01:19.339 còn thứ gì khác, trong một chương trình, 0:01:19.339,0:01:20.669 mà ta có thể dùng biến để lưu trữ nữa. 0:01:20.669,0:01:21.449 Để làm được điều đó 0:01:21.449,0:01:22.638 tôi sẽ xem 0:01:22.638,0:01:23.608 từng dòng code 0:01:23.622,0:01:25.122 và tìm kiếm thứ gọi là 0:01:25.157,0:01:27.447 các giá trị hard-code (code cứng). 0:01:27.658,0:01:29.308 Đó là những con số, 0:01:29.388,0:01:30.648 chỉ riêng số mà thôi, 0:01:30.723,0:01:33.413 không phải biến hay phụ thuộc vào biến. 0:01:34.277,0:01:35.377 Hãy bắt đầu từ đây, 0:01:35.432,0:01:37.002 trong lần gọi lệnh ellipse đầu tiên, 0:01:37.832,0:01:39.222 ta có 300 và 300 0:01:39.262,0:01:41.062 ứng với chiều rộng và chiều cao. 0:01:41.584,0:01:43.794 Đó chỉ là những con số 0:01:43.794,0:01:45.114 nên hãy tạo một biến 0:01:45.114,0:01:46.214 để thay thế cho những giá trị đó 0:01:46.214,0:01:47.754 với tên là faceSize. 0:01:48.791,0:01:50.291 Và nó lưu giá trị là 300. 0:01:50.291,0:01:53.201 Giờ ta sẽ viết faceSize, 0:01:53.709,0:01:55.259 faceSize. 0:01:55.514,0:01:56.794 OK. Ta tiếp tục. 0:01:56.868,0:01:58.108 và bỏ qua phần màu sắc. 0:01:58.156,0:02:00.076 Giờ câu lệnh ellipse cũng vậy. 0:02:00.104,0:02:01.504 Chúng đều là biến hoặc 0:02:01.544,0:02:02.704 phụ thuộc vào biến 0:02:02.726,0:02:03.896 vì vậy tạm thời 0:02:03.896,0:02:04.846 ta sẽ để chúng như vậy. 0:02:04.859,0:02:06.729 Và sau đó là lệnh mouth 0:02:07.419,0:02:09.339 cũng phụ thuộc vào 'x' và 'y' 0:02:09.339,0:02:10.369 nhưng những gì ở đây 0:02:10.417,0:02:11.947 lại chỉ là những con số độc lập 0:02:12.899,0:02:14.669 150 và 150. 0:02:14.799,0:02:16.139 Như vậy ta sẽ có 0:02:16.223,0:02:18.953 mouthSize, một cái tên hay đấy, 0:02:19.026,0:02:20.476 bằng 150. 0:02:22.464,0:02:25.264 Ta sẽ thay thế chỗ này bằng mouthSize 0:02:25.301,0:02:27.481 và mouthSize. 0:02:27.556,0:02:28.816 Được rồi. 0:02:28.861,0:02:30.751 Ta lưu kích thước của các hình vẽ 0:02:30.825,0:02:32.725 trong các biến ở trên cùng 0:02:32.773,0:02:34.543 để ta có thể thực sự dễ dàng 0:02:34.543,0:02:36.093 thay đổi kích thước 0:02:36.103,0:02:36.933 như thế này, như thế này... 0:02:36.933,0:02:39.163 Wooo Winston đang đói 0:02:39.257,0:02:41.157 và sau đó kiểu như, bạn biết đấy, 0:02:41.157,0:02:42.747 Winston đói và 0:02:42.761,0:02:44.291 rồi anh ta ăn rất nhiều bánh rán 0:02:44.291,0:02:45.931 và sau đó trở nên siêu bự. 0:02:45.962,0:02:47.532 Ổn rồi. 0:02:47.542,0:02:48.982 nhưng có điều gì đó 0:02:49.037,0:02:51.347 tôi không thích ở chương trình vào lúc này. 0:02:51.863,0:02:59.303 Nếu tôi để kích thước khuôn mặt rất nhỏ 0:02:59.404,0:03:01.064 thì nó bắt đầu trông buồn cười 0:03:01.076,0:03:03.006 vì mắt và miệng 0:03:03.017,0:03:04.667 đang nhô ra khỏi mặt 0:03:04.667,0:03:06.717 và tại một số điểm nhất định, nó thậm chí 0:03:06.717,0:03:07.887 trông chả liên quan gì 0:03:07.887,0:03:08.667 tới khuôn mặt, 0:03:08.667,0:03:10.707 hay nó không còn là một khuôn mặt nữa, phải không? 0:03:11.629,0:03:13.959 Vì vậy, ta thực muốn nó xảy ra 0:03:13.959,0:03:16.309 là khi thay đổi khuôn mặt 0:03:16.309,0:03:18.299 ta muốn mắt và miệng - 0:03:18.354,0:03:21.584 kích thước của chúng thay đổi theo. 0:03:21.584,0:03:23.994 Vì vậy, nếu tôi đặt FaceSize là một nửa kích thước. 0:03:24.144,0:03:27.454 Ta muốn miệng cũng bằng một nửa kích thước. 0:03:27.454,0:03:29.044 Như vậy, nghĩa là, 0:03:29.519,0:03:32.589 ta muốn tính toán mouthSize và eyeSize 0:03:32.589,0:03:35.929 bằng vài phần của faceSize. 0:03:36.690,0:03:39.790 Được rồi, hãy thiết lập lại các biến này 0:03:39.790,0:03:42.060 và tôi sẽ cho bạn thấy tôi có ý gì. 0:03:42.061,0:03:44.221 Hãy bắt đầu với mouthSize. 0:03:44.221,0:03:45.141 Hiện giờ 0:03:45.172,0:03:49.512 faceSize có kích thước là 300 và mouthSize là 150. 0:03:50.187,0:03:51.727 Vì vậy, nếu ta nghĩ về 0:03:51.727,0:03:53.007 sự tương quan của chúng, 0:03:53.007,0:03:55.907 ta sẽ nói rằng faceSize lớn gấp đôi 0:03:55.907,0:03:57.577 mouthSize 0:03:57.577,0:04:00.137 hoặc mouthSize lớn bằng một nửa 0:04:00.137,0:04:01.357 của faceSize. 0:04:01.432,0:04:03.872 Và ta có thể viết code như sau 0:04:04.063,0:04:08.063 1/2 faceSize. 0:04:08.133,0:04:09.703 OK. Dòng code này nói 0:04:09.703,0:04:11.873 rằng ta lấy giá trị của faceSize 0:04:11.873,0:04:13.113 nhân nó với 1/2 0:04:13.113,0:04:15.393 và lưu vào biến mouthSize 0:04:15.674,0:04:17.494 để nếu ta thay đổi cái này ở đây 0:04:18.029,0:04:20.259 nó sẽ biết một nửa giá trị đó là gì 0:04:20.273,0:04:22.353 và đó chính là mouthSize. 0:04:22.353,0:04:24.073 Hoàn hảo! Đó là những gì ta muốn 0:04:24.848,0:04:26.948 Như vậy, bây giờ đến lượt eyeSize, 0:04:27.268,0:04:28.908 faceSize có giá trị là 300 0:04:29.168,0:04:31.039 và eyeSize là 40. 0:04:31.039,0:04:33.219 Như vậy ta cần nó nhận giá trị 0:04:33.219,0:04:36.639 40/300 của faceSize. 0:04:36.639,0:04:39.459 tức là, xem nào 0:04:39.459,0:04:41.138 4/30, ta có thể 0:04:41.138,0:04:43.768 tối giản thàn 2/15. 0:04:44.295,0:04:45.605 Như vậy ta có 0:04:45.609,0:04:49.609 2/15 lần faceSize. 0:04:50.111,0:04:50.911 Nhân đây, 0:04:50.949,0:04:52.459 nếu bạn chưa quen với phân số 0:04:52.459,0:04:54.279 và phần tính toán số học trên làm khó bạn, 0:04:54.352,0:04:56.422 hãy tìm hiểu thêm về phân số 0:04:56.422,0:04:57.562 trên Khan Academy 0:04:57.562,0:04:59.562 và quay lại đây khi bạn 0:04:59.562,0:05:00.442 cảm thấy sẵn sàng. 0:05:00.442,0:05:01.912 Ở đây này, bạn chỉ cần truy cập vào đó. 0:05:02.752,0:05:03.532 OK. 0:05:03.532,0:05:06.442 Như vậy, hãy thử thay đổi kích thước khuôn mặt một lần nữa. 0:05:06.925,0:05:08.155 Haha! Kiểm tra nó 0:05:08.155,0:05:10.015 miệng và mắt thay đổi kích thước 0:05:10.015,0:05:11.655 cân xứng với khuôn mặt. 0:05:11.975,0:05:13.495 Nhưng ta nhận thấy 0:05:13.495,0:05:14.875 có gì đó không đúng ở đây. 0:05:14.875,0:05:16.565 Mắt và miệng 0:05:16.572,0:05:19.162 vẫn còn nhô ra khỏi khuôn mặt 0:05:19.162,0:05:20.502 dù cho chúng có 0:05:20.502,0:05:22.612 kích thước hợp lý hơn nhiều. 0:05:23.206,0:05:24.906 Đó là bởi vì ta vẫn còn 0:05:24.906,0:05:26.626 một số phần hard-code 0:05:26.626,0:05:28.396 trong các lệnh ellipse của mình. 0:05:28.396,0:05:30.376 Những con sô đó thực sự cần phải 0:05:30.376,0:05:32.656 được thay thế bằng tỷ lệ với các biến. 0:05:33.148,0:05:34.578 Ở đây, tôi sẽ chỉ cho bạn. 0:05:34.669,0:05:37.799 Như vậy, đối với hình elip vẽ mắt ta có 0:05:37.799,0:05:40.819 x - 50 để ra vị trí 'x' 0:05:40.838,0:05:43.278 Điều này có nghĩa là nó luôn luôn bằng 'x - 50'. 0:05:43.443,0:05:45.133 Ngay cả khi ta đặt faceSize 0:05:45.133,0:05:46.843 nhỏ hơn 50 pixel. 0:05:46.843,0:05:48.063 Và nó chắc chắn không có ý nghĩa 0:05:48.063,0:05:49.783 bởi vì điều đó có nghĩa là 0:05:49.783,0:05:50.461 mắt trái sẽ 0:05:52.441,0:05:55.218 Vì vậy nó phải là x trừ đi 1 phần 0:05:55.218,0:05:57.258 kích thước khuôn mặt 0:05:57.278,0:05:59.218 và ta có thể tìm ra phân số 0:05:59.218,0:06:00.148 theo cùng một cách. 0:06:00.148,0:06:03.898 50 so với 300 ban đầu. 0:06:03.898,0:06:07.898 50/300, 5/30, 1/6. 0:06:08.582,0:06:11.952 Như vậy, 1/6 của faceSize. 0:06:12.440,0:06:14.110 Và ta thấy con số 50 khác ở đây 0:06:14.400,0:06:16.060 vì vậy ta có thể làm điều tương tự 0:06:16.060,0:06:17.360 cùng một biểu thức. 0:06:17.360,0:06:19.140 Ở đây ta có 100/300 0:06:19.460,0:06:20.690 tức là 0:06:20.710,0:06:23.220 1/3 faceSize, 0:06:23.220,0:06:24.720 cái này là 60. 0:06:24.720,0:06:26.080 Như vậy cuối cùng sẽ 0:06:26.080,0:06:28.897 là 1/5 lần faceSize 0:06:29.267,0:06:32.087 Và đây là 50 0:06:32.087,0:06:34.457 vậy là 1/6 nữa. 0:06:34.457,0:06:35.727 Và sau đó 40. 0:06:35.727,0:06:38.257 Đó là những gì ta đã tìm ra ở đây, 0:06:38.257,0:06:39.507 2/15. 0:06:39.507,0:06:44.937 Như vậy, 2/15 lần faceSize. 0:06:45.347,0:06:48.117 Được rồi, hãy thử lại xem. 0:06:48.117,0:06:49.477 Ồ, nhìn kìa! 0:06:49.477,0:06:51.257 Hãy nhìn xem. Đẹp quá! 0:06:51.268,0:06:52.048 Tuyệt rồi! 0:06:52.617,0:06:54.587 OK, hãy cùng xem lại nhé. 0:06:54.587,0:06:56.117 Ta đã tạo ra biến này 0:06:56.130,0:06:57.950 để lưu kích thước của khuôn mặt 0:06:57.950,0:06:59.630 và nó lưu giữ một giá trị 0:06:59.630,0:07:01.510 rồi ta có các biến mouthSize 0:07:01.510,0:07:03.350 và eyeSize 0:07:03.350,0:07:05.710 và ta tính toán chúng dựa trên tỷ lệ 0:07:05.710,0:07:06.790 với faceSize 0:07:06.790,0:07:07.770 để chắc chắn rằng 0:07:07.770,0:07:09.500 giá trị của chúng luôn thay đổi 0:07:09.500,0:07:12.360 theo giá trị khởi điểm (faceSize) 0:07:12.514,0:07:15.104 vì tất cả các giá trị còn lại được tính toán 0:07:15.104,0:07:16.894 cũng dựa trên faceSize 0:07:16.894,0:07:18.454 để đảm bảo rằng vị trí 0:07:18.454,0:07:19.884 các bộ phận trên khuôn mặt thay đổi 0:07:19.884,0:07:22.064 khi faceSize thay đổi 0:07:22.064,0:07:23.014 Whoo! Ổn rồi. 0:07:23.014,0:07:24.614 Như vậy, giờ ta đã thực sự hiểu 0:07:24.614,0:07:25.725 cách làm cho các biến 0:07:25.725,0:07:27.865 phụ thuộc vào giá trị của biến khác. 0:07:27.865,0:07:30.375 Ta còn có thể làm nhiều hơn nữa với những chương trình mình. 0:07:30.375,0:07:32.365 Hãy ăn mừng bằng cách làm Winston 0:07:32.365,0:00:00.000 trở nên khổng lồ! Yeah, đi nào Winston!