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