[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:01.74,0:00:07.34,Default,,0000,0000,0000,, Trong lần nói chuyện cuối cùng, ta đã chỉ ra cách làm quả bóng nảy dịch chuyển ra khỏi cạnh bằng cách sử dụng hàm vẽ và câu lệnh if. Dialogue: 0,0:00:07.34,0:00:08.64,Default,,0000,0000,0000,, Hãy xem lại. Dialogue: 0,0:00:08.64,0:00:12.41,Default,,0000,0000,0000,, Đầu tiên, ta thiết lập một số biến ban đầu dành cho vị trí và tốc độ của quả bóng. Dialogue: 0,0:00:12.41,0:00:17.24,Default,,0000,0000,0000,, Sau đó, trong hàm vẽ, đó là hàm đặc biệt được gọi đi gọi lại khi chương trình đang chạy, Dialogue: 0,0:00:17.24,0:00:20.91,Default,,0000,0000,0000,, ta vẽ lại nền và hình elip trên khung vẽ Dialogue: 0,0:00:20.91,0:00:27.78,Default,,0000,0000,0000,, và định vị hình elip đó dựa trên biến vị trí, tốc độ và cách chúng tương quan nhau. Dialogue: 0,0:00:27.78,0:00:31.20,Default,,0000,0000,0000,, Bây giờ, không có mệnh đề if, quả bóng sẽ tiếp tục di chuyển mãi, Dialogue: 0,0:00:31.20,0:00:32.86,Default,,0000,0000,0000,, hoặc cho đến khi ta nhấn chạy lại. Dialogue: 0,0:00:32.86,0:00:36.36,Default,,0000,0000,0000,, Vậy, ta đã thêm hai mệnh đề if dưới đây Dialogue: 0,0:00:36.44,0:00:40.60,Default,,0000,0000,0000,, để kiểm tra và xem bóng ở gần bên phải hay bên trái màn hình, Dialogue: 0,0:00:40.61,0:00:45.31,Default,,0000,0000,0000,, và nếu vậy, ta thay đổi tốc độ thành dương hoặc âm để bóng, về cơ bản, sẽ nảy trở lại. Dialogue: 0,0:00:45.31,0:00:50.07,Default,,0000,0000,0000,, Vậy, bây giờ ta chỉ có quả bóng này, nảy qua lại mãi. Dialogue: 0,0:00:50.07,0:00:53.67,Default,,0000,0000,0000,, Điều đó thật tuyệt, và có rất nhiều ảnh động thực sự thú vị mà ta có thể tạo ra với nó. Dialogue: 0,0:00:53.67,0:00:57.68,Default,,0000,0000,0000,, Nhưng bây giờ, tôi muốn thêm tương tác người dùng vào chương trình này. Dialogue: 0,0:00:57.68,0:01:00.07,Default,,0000,0000,0000,, Xem này, ngay bây giờ nó giống như một chương trình truyền hình. Dialogue: 0,0:01:00.07,0:01:04.94,Default,,0000,0000,0000,, nếu bạn đưa nó cho một người bạn và người đó không biết lập trình thì sẽ không thể thực sự tương tác với nó. Dialogue: 0,0:01:04.94,0:01:07.61,Default,,0000,0000,0000,, Tất cả những gì họ có thể làm là xem mà thôi, thật tuyệt, Dialogue: 0,0:01:07.61,0:01:10.34,Default,,0000,0000,0000,, nhưng sẽ tuyệt hơn rất nhiều nếu họ thực sự có thể làm gì đó. Dialogue: 0,0:01:10.34,0:01:13.47,Default,,0000,0000,0000,, Vậy, hãy cung cấp cho người dùng một số cách để điều khiển chương trình nhé. Dialogue: 0,0:01:13.47,0:01:20.16,Default,,0000,0000,0000,, Hãy nhớ trước đó ta đã biết về hai biến toàn cục đặc biệt gọi là mouseX và mouseY. Dialogue: 0,0:01:20.16,0:01:25.97,Default,,0000,0000,0000,, Các biến đó trả về các giá trị cho biết về vị trí hiện tại của con trỏ Dialogue: 0,0:01:25.97,0:01:28.78,Default,,0000,0000,0000,, và chúng là cách tuyệt vời để làm cho chương trình mang tính tương tác nhiều hơn. Dialogue: 0,0:01:28.78,0:01:31.24,Default,,0000,0000,0000,, Vậy, hãy xem. Làm thế nào ta có thể sử dụng chúng? Dialogue: 0,0:01:31.24,0:01:34.03,Default,,0000,0000,0000,, Chà, ta nên dùng bên trong hàm draw, ở đâu đó. Dialogue: 0,0:01:34.03,0:01:39.50,Default,,0000,0000,0000,, Bởi vì đó là mã duy nhất được gọi đi gọi lại khi chương trình chạy. Dialogue: 0,0:01:39.50,0:01:44.55,Default,,0000,0000,0000,, Tất cả mọi lệnh bên ngoài draw chỉ được gọi một lần, khi chương trình bắt đầu chạy lần đầu. Dialogue: 0,0:01:44.55,0:01:48.14,Default,,0000,0000,0000,, Vậy, việc sử dụng mouseX và mouseY ở đó là vô nghĩa. Dialogue: 0,0:01:48.14,0:01:51.24,Default,,0000,0000,0000,, Người dùng chưa có cơ hội tương tác với nó. Dialogue: 0,0:01:51.24,0:01:57.28,Default,,0000,0000,0000,, Trong draw, ta đang vẽ quả bóng 200 pixel ở dưới màn hình. Dialogue: 0,0:01:57.28,0:02:01.24,Default,,0000,0000,0000,, Sẽ ra sao nếu ta thay thế nó bằng mouseY? Dialogue: 0,0:02:01.24,0:02:02.74,Default,,0000,0000,0000,, Bởi vì đó là tọa độ y, phải không? Dialogue: 0,0:02:02.74,0:02:08.53,Default,,0000,0000,0000,, Vậy, theo cách này, nó sẽ chỉ thêm tọa độ y tùy theo vị trí y của người dùng. Đúng không nhỉ? Dialogue: 0,0:02:08.53,0:02:14.36,Default,,0000,0000,0000,, Vậy, hãy kiểm tra. Chỉ cần di chuyển con trỏ lên và xuống, tôi đã có thể thay đổi đường đi của bóng theo chiều dọc. Dialogue: 0,0:02:14.36,0:02:18.20,Default,,0000,0000,0000,, Điều đó thật tuyệt. Nhưng tôi cũng muốn sử dụng cả mouseX nữa. Dialogue: 0,0:02:18.20,0:02:19.86,Default,,0000,0000,0000,, Vậy, ta nên sử dụng nó như thế nào? Dialogue: 0,0:02:19.86,0:02:22.44,Default,,0000,0000,0000,, Chà, tại sao không tạo ra một quả bóng khác Dialogue: 0,0:02:22.44,0:02:25.94,Default,,0000,0000,0000,, và cho nó đi theo hướng ngược lại: lên và xuống. Dialogue: 0,0:02:25.94,0:02:30.03,Default,,0000,0000,0000,, Và ở đó ta sẽ cho người dùng điều khiển vị trí x của nó. Dialogue: 0,0:02:30.03,0:02:32.61,Default,,0000,0000,0000,, Vậy, ta cần làm gần như ngược lại. Dialogue: 0,0:02:32.61,0:02:40.64,Default,,0000,0000,0000,, Ta sẽ gõ ellipse mouseX vị trí 50 50. Ổn chứ? Dialogue: 0,0:02:40.64,0:02:46.91,Default,,0000,0000,0000,, Hãy kiểm tra! Giờ, tôi đã có hai quả bóng để điều khiển và đi theo hướng vuông góc. Dialogue: 0,0:02:46.91,0:02:50.08,Default,,0000,0000,0000,, Nhưng, tôi vẫn chưa vui. Dialogue: 0,0:02:50.08,0:02:53.44,Default,,0000,0000,0000,, Tôi muốn cho người dùng quyền kiểm soát nhiều hơn. Dialogue: 0,0:02:53.44,0:02:56.94,Default,,0000,0000,0000,, Tôi muốn cho người dùng sức mạnh để tạo ra quả bóng thứ hai. Dialogue: 0,0:02:56.94,0:03:01.41,Default,,0000,0000,0000,, Để thực sự cho nó tồn tại, chỉ bằng cách nhấn con trỏ. Dialogue: 0,0:03:01.41,0:03:07.34,Default,,0000,0000,0000,, Chà, sau đó tôi cần tìm ra cách để biết người dùng đang nhấn con trỏ. Dialogue: 0,0:03:07.34,0:03:12.94,Default,,0000,0000,0000,, Rất may, ta có một biến boolean rất đặc biệt cho điều đó. Dialogue: 0,0:03:12.94,0:03:19.36,Default,,0000,0000,0000,, Nó được gọi là mouseIsPression và ta có thể sử dụng nó trong câu lệnh if. Dialogue: 0,0:03:19.36,0:03:22.34,Default,,0000,0000,0000,, Vậy, hãy xem. Đây là quả bóng thứ hai . Dialogue: 0,0:03:22.34,0:03:31.94,Default,,0000,0000,0000,, Vậy, ta có thể nói if mouseIsPress, và sau đó ta sẽ di chuyển hình elip đến đó. Dialogue: 0,0:03:31.94,0:03:40.86,Default,,0000,0000,0000,, Vậy, những gì nó đang làm ở đây, là nói với chương trình rằng ta chỉ muốn vẽ hình elip nếu điều kiện là đúng Dialogue: 0,0:03:40.86,0:03:46.03,Default,,0000,0000,0000,, mouseIsPression sẽ chỉ đúng khi người dùng nhấn con trỏ. Dialogue: 0,0:03:46.03,0:03:48.20,Default,,0000,0000,0000,, Vậy, hãy thử xem. Dialogue: 0,0:03:48.20,0:03:50.34,Default,,0000,0000,0000,, Ta da! Dialogue: 0,0:03:50.34,0:03:53.36,Default,,0000,0000,0000,, Vậy, bây giờ ta có thể khiến quả bóng xuất hiện bất cứ khi nào nhấn chuột. Dialogue: 0,0:03:53.36,0:03:58.41,Default,,0000,0000,0000,, Vậy, nó đi vào từ vũ trụ song song này. Vào trong! Vào trong! Vào trong! Dialogue: 0,0:03:58.41,0:04:00.03,Default,,0000,0000,0000,, Thật tuyệt vời! Dialogue: 0,0:04:00.03,0:04:04.74,Default,,0000,0000,0000,, Vậy, điều thú vị về biến mouseIsPression Dialogue: 0,0:04:04.74,0:04:08.80,Default,,0000,0000,0000,, là nó thay đổi dựa trên những gì người dùng làm, không dựa trên những gì chương trình làm. Dialogue: 0,0:04:08.80,0:04:13.20,Default,,0000,0000,0000,, và vì hàm draw được gọi lặp đi lặp lại, Dialogue: 0,0:04:13.20,0:04:16.17,Default,,0000,0000,0000,, kết quả của chương trình sẽ thay đổi theo thời gian Dialogue: 0,0:04:16.17,0:04:18.74,Default,,0000,0000,0000,, chỉ với một chút tác động của người dùng. Dialogue: 0,0:04:18.74,0:04:22.03,Default,,0000,0000,0000,, Với sức mạnh kết hợp của câu lệnh if và mouseIsPress, Dialogue: 0,0:04:22.03,0:04:26.24,Default,,0000,0000,0000,, bạn có mọi thứ cần thiết để tạo ra những điều tuyệt vời như nút bấm (button) và chương trình vẽ. Dialogue: 0,0:04:26.24,0:00:00.00,Default,,0000,0000,0000,, Woo hoo!