﻿1
00:00:04,390 --> 00:00:05,440
‫Xin chào và chào mừng.

2
00:00:05,440 --> 00:00:10,000
‫Trong bài giảng này, chúng tôi sẽ thêm một thành phần mới vào trình phát BP của chúng tôi, tay cầm vật lý.

3
00:00:10,000 --> 00:00:16,060
‫Và chúng tôi sẽ tìm hiểu cách chúng tôi có thể lấy một con trỏ đến nó trong thành phần grabber của chúng tôi.

4
00:00:16,060 --> 00:00:20,800
‫Chúng ta cũng sẽ xem xét cách chúng ta có thể tự bảo vệ mình khỏi việc vô tình làm động cơ bị rơi.

5
00:00:20,800 --> 00:00:23,380
‫Hãy đi sâu vào và xem làm thế nào.

6
00:00:24,280 --> 00:00:29,380
‫Bây giờ, để nắm lấy một vật thể, chúng ta cần tương tác với hệ thống vật lý.

7
00:00:29,380 --> 00:00:37,090
‫Và thực sự có một thành phần mà chúng ta có thể sử dụng được gọi là tay cầm vật lý, cho phép chúng ta lấy các đối tượng vật lý

8
00:00:37,090 --> 00:00:43,090
‫và cho chúng biết chúng ta muốn ở đâu trên thế giới, nhưng làm theo cách mà nó thừa nhận các ràng buộc vật

9
00:00:43,090 --> 00:00:45,760
‫lý nên không ' t xuyên qua các bức tường.

10
00:00:46,180 --> 00:00:53,200
‫Và nó trông giống như vật thể đang ở trên một lò xo chứ không phải tuân theo một điểm cụ thể mà chúng ta bảo nó

11
00:00:53,200 --> 00:00:54,880
‫đi tới một cách cứng nhắc.

12
00:00:55,030 --> 00:00:57,910
‫Vì vậy, chúng tôi sẽ sử dụng các thành phần xử lý vật lý này.

13
00:00:57,910 --> 00:01:02,230
‫Chúng tôi sẽ thêm nó vào máy nghe nhạc của chúng tôi, BP, cùng với bộ lấy.

14
00:01:02,230 --> 00:01:09,790
‫Vì vậy, chúng ta hãy đi đến nút thêm bên dưới ngăn thành phần và tìm kiếm tay cầm vật lý và thêm nó vào.

15
00:01:09,790 --> 00:01:14,290
‫Và bạn có thể thấy rằng đó là một thành phần diễn viên, không phải một thành phần cảnh, bởi vì nó

16
00:01:14,290 --> 00:01:18,460
‫đi xuống ở phần dưới nên nó không thực sự có một biến đổi vật lý của riêng nó.

17
00:01:18,460 --> 00:01:23,830
‫Những gì chúng ta làm với tay cầm vật lý là chúng ta ra lệnh cho nó đối tượng để lấy và sau đó chúng ta nói với nó nơi

18
00:01:23,830 --> 00:01:26,170
‫chúng ta muốn nó đặt đối tượng mà chúng ta đã nắm lấy.

19
00:01:26,290 --> 00:01:32,050
‫Nếu bạn xem qua tài liệu, bạn có thể thấy điều này trong các chức năng có sẵn.

20
00:01:32,060 --> 00:01:39,430
‫Nếu bạn cuộn xuống phần chức năng, bạn có thể thấy rằng có một thành phần phát hành và một thành phần lấy

21
00:01:39,430 --> 00:01:41,320
‫tại chức năng vị trí.

22
00:01:41,320 --> 00:01:45,940
‫Ngoài ra còn có một vị trí mục tiêu đã đặt và xoay vòng.

23
00:01:45,940 --> 00:01:51,160
‫Đây là nơi nó muốn thử và đặt đối tượng, nhưng rõ ràng là nó sẽ tôn trọng mọi ràng buộc vật lý

24
00:01:51,160 --> 00:01:56,440
‫khi làm như vậy và nó sẽ làm điều đó một cách trơn tru như thể nó đang ở trên một chiếc lò xo.

25
00:01:56,440 --> 00:02:02,440
‫Bây giờ, chúng ta sẽ không sử dụng các hàm này, nhưng chúng ta cần tìm cách nắm giữ thành

26
00:02:02,440 --> 00:02:05,470
‫phần này trong thành phần grabber của chúng ta.

27
00:02:05,590 --> 00:02:07,780
‫Vì vậy, làm thế nào để chúng tôi làm điều đó?

28
00:02:07,780 --> 00:02:15,310
‫Chà, chúng ta hãy chuyển sang phần lấy CP của chúng tôi và xem qua phần bắt đầu chơi và thử nắm bắt lấy nó.

29
00:02:15,310 --> 00:02:23,980
‫Bây giờ có một chức năng trên bất kỳ tác nhân nào cho phép chúng ta tìm một thành phần theo loại của nó.

30
00:02:23,980 --> 00:02:27,190
‫Nhưng loại tay cầm vật lý là gì?

31
00:02:27,190 --> 00:02:31,180
‫Vâng, nó là một thành phần xử lý vật lý của bạn.

32
00:02:31,180 --> 00:02:36,670
‫Bây giờ, để nắm được loại này, chúng ta cần sử dụng bao gồm và bạn có thể thấy bao gồm trong tài liệu là các thành

33
00:02:36,670 --> 00:02:40,180
‫phần xử lý vật lý dấu gạch chéo về phía trước của động cơ vật lý.

34
00:02:40,180 --> 00:02:46,420
‫Hãy sao chép nó qua lấy một CP của chúng tôi và thêm nó vào trong phần thêm trình trợ giúp gỡ lỗi vẽ.

35
00:02:46,870 --> 00:02:53,470
‫Sau đó, những gì chúng ta sẽ làm là chúng ta sẽ thực hiện một ONA để nắm bắt con

36
00:02:53,590 --> 00:03:00,370
‫trỏ hành động của riêng chúng ta, sau đó thực hiện một mũi tên và tìm thành phần thú vị theo lớp.

37
00:03:00,370 --> 00:03:07,540
‫Bây giờ hàm này là một loại hàm đặc biệt được gọi là hàm mẫu trong C ++, và điều này có

38
00:03:07,540 --> 00:03:14,410
‫nghĩa là bạn có thể chuyển cho nó một số tham số thực sự được đánh giá khi bạn biên dịch.

39
00:03:14,410 --> 00:03:19,090
‫Và cách bạn làm điều này là sử dụng các dấu ngoặc nhọn như thế này.

40
00:03:19,090 --> 00:03:25,330
‫Vì vậy, bạn sử dụng một dấu ngoặc nhọn sau hàm và bạn cung cấp cho nó kiểu mà bạn muốn nó

41
00:03:25,330 --> 00:03:30,910
‫tìm, trong trường hợp của chúng tôi là thành phần xử lý vật lý của bạn như vậy.

42
00:03:30,970 --> 00:03:33,250
‫Và sau đó bạn đóng dấu ngoặc nhọn.

43
00:03:33,250 --> 00:03:37,660
‫Nhưng bởi vì nó là một hàm, bạn cũng cần phải gọi nó bằng cách sử dụng dấu ngoặc đơn thông thường.

44
00:03:37,660 --> 00:03:41,680
‫Vì vậy, sau đó bạn đặt tập hợp các dấu ngoặc đơn thứ hai sau này.

45
00:03:41,680 --> 00:03:48,640
‫Vì vậy, bạn có thể thấy rằng các đối số thời gian biên dịch này được chuyển bằng cách sử dụng dấu ngoặc nhọn và sau đó các

46
00:03:48,640 --> 00:03:52,330
‫đối số thời gian chạy được chuyển bằng cách sử dụng dấu ngoặc đơn.

47
00:03:52,630 --> 00:03:58,900
‫Bây giờ, giống như một hàm thông thường, hàm này sẽ có giá trị trả về và trong trường hợp này, giá trị trả về sẽ là bất

48
00:03:58,900 --> 00:04:01,390
‫kỳ kiểu nào mà chúng ta đã chuyển vào đây.

49
00:04:01,390 --> 00:04:08,680
‫Nhưng với tư cách là một con trỏ, vì vậy chúng tôi có thể sử dụng con trỏ thành phần xử lý vật lý của bạn

50
00:04:08,680 --> 00:04:16,390
‫và tạo một biến mà chúng tôi sẽ gọi là xử lý vật lý và đặt nó bằng với thành phần nhận chủ sở hữu tìm kiếm theo lớp.

51
00:04:16,390 --> 00:04:21,910
‫Bây giờ chúng ta hãy nhớ dấu chấm phẩy ở cuối dòng này và đó là mọi thứ cần thiết để chúng

52
00:04:21,910 --> 00:04:26,110
‫ta nắm được một thành phần khác trên cùng một tác nhân của chúng ta.

53
00:04:26,110 --> 00:04:32,740
‫Bây giờ hãy nhớ rằng tôi đã nói với bạn rằng con trỏ có thể nguy hiểm vì đôi khi chúng có thể là giá trị rỗng

54
00:04:32,740 --> 00:04:34,720
‫và có thể dẫn đến sự cố.

55
00:04:34,720 --> 00:04:42,100
‫Vì vậy, hãy tưởng tượng chúng tôi đã quên đặt một thành phần tay cầm vật lý trên tác nhân của chúng tôi hoặc chúng tôi đã đặt một bộ gắp vào một

56
00:04:42,100 --> 00:04:46,180
‫tác nhân mới và chúng tôi chưa kết nối nó với thành phần tay cầm vật lý.

57
00:04:46,180 --> 00:04:52,510
‫Nếu đúng như vậy, thì con trỏ xử lý vật lý sẽ là một con trỏ null.

58
00:04:52,510 --> 00:04:59,020
‫Và nếu chúng ta cố gắng sử dụng toán tử mũi tên hoặc toán tử tham chiếu trên con trỏ đó, nó sẽ làm hỏng động cơ của chúng

59
00:04:59,020 --> 00:05:03,340
‫ta và đôi khi có thể thực sự khó để biết được sự cố đó trông như thế nào.

60
00:05:03,340 --> 00:05:10,000
‫Vì vậy, tôi sẽ tiếp tục và thực sự gây ra sự cố này chỉ để cho bạn thấy và bạn có thể nhận ra

61
00:05:10,000 --> 00:05:15,700
‫nó nếu nó xảy ra với bạn trong tương lai, tôi sẽ gán lại con trỏ xử lý vật lý

62
00:05:15,700 --> 00:05:18,010
‫của chúng tôi bằng con trỏ null .

63
00:05:19,060 --> 00:05:20,320
‫Từ khóa đặc biệt.

64
00:05:20,320 --> 00:05:21,630
‫Tất cả đều vô hiệu.

65
00:05:21,640 --> 00:05:24,550
‫Peter Đó là cách bạn đánh vần con trỏ null trong C ++.

66
00:05:24,550 --> 00:05:28,030
‫Sau đó, bạn đặt một dấu chấm phẩy ở cuối, và sau đó những gì

67
00:05:28,030 --> 00:05:32,410
‫chúng ta sẽ làm là chúng ta sẽ làm vật lý, xử lý mũi tên, lấy tên như vậy.

68
00:05:32,620 --> 00:05:38,200
‫Và nếu chúng ta tiếp tục và biên dịch bằng cách sử dụng mã hóa trực tiếp và khi quá trình biên dịch hoàn

69
00:05:38,200 --> 00:05:43,790
‫tất, chúng ta sẽ tiếp tục và đảm bảo rằng, trước hết, chúng ta lưu mọi thứ mà chúng ta có ở đây để

70
00:05:43,840 --> 00:05:49,330
‫phát lại vì tôi sắp làm hỏng động cơ và nếu tôi tiếp tục và chơi, thì đây là kết quả mà chúng

71
00:05:49,330 --> 00:05:50,140
‫tôi gặp phải.

72
00:05:50,140 --> 00:05:55,390
‫PV Và bạn có thể bị cám dỗ để nghĩ rằng khi bạn thấy điều này rằng có gì đó không ổn với

73
00:05:55,390 --> 00:05:58,440
‫không thực, nhưng thực ra mã của bạn có lỗi ở đây.

74
00:05:58,450 --> 00:06:06,220
‫Bạn có thể thấy rằng trong báo cáo sự cố này, dòng đầu tiên cho biết sự cố đến từ việc bạn lấy dấu hai chấm,

75
00:06:06,250 --> 00:06:08,230
‫dấu hai chấm, bắt đầu chơi.

76
00:06:08,230 --> 00:06:11,760
‫Và nó cũng thực sự cho chúng ta số dòng, đó là dòng 28.

77
00:06:11,770 --> 00:06:18,490
‫Vì vậy, bạn có thể thấy rằng tại thời điểm này trên dòng 28, khi chúng tôi tham chiếu đến con trỏ đó, để

78
00:06:18,490 --> 00:06:26,080
‫gọi một hàm trên nó, chúng tôi thực sự đã phạm một lỗi nghiêm trọng trong việc không kiểm tra trước xem con trỏ đó có rỗng

79
00:06:26,080 --> 00:06:26,800
‫hay không.

80
00:06:26,860 --> 00:06:28,330
‫Vì vậy, đó là những gì chúng ta cần làm.

81
00:06:28,330 --> 00:06:29,710
‫Và chúng tôi làm điều đó với câu lệnh if.

82
00:06:29,710 --> 00:06:41,440
‫Về cơ bản chúng ta nói rằng nếu điều khiển vật lý không bằng con trỏ null, thì chúng ta có thể tiếp tục và gọi nội dung trên chốt điều khiển vật lý đó để chúng ta có thể đặt chốt

83
00:06:41,440 --> 00:06:46,900
‫điều khiển vật lý, lấy tên bên trong câu lệnh if này và điều đó bảo vệ chúng ta

84
00:06:46,900 --> 00:06:52,120
‫vì mã đó, D mã tham chiếu sẽ không được thực thi trong trường hợp chúng ta có

85
00:06:52,120 --> 00:06:53,380
‫một con trỏ null.

86
00:06:53,380 --> 00:06:58,330
‫Vì vậy, tôi sẽ tiếp tục và loại bỏ dòng 27 bây giờ, nơi chúng tôi đang đặt nó thành một con trỏ null.

87
00:06:58,330 --> 00:07:02,710
‫Và tôi sẽ thách bạn in tên thành phần cho chính mình.

88
00:07:02,710 --> 00:07:10,930
‫Vì vậy, chỉ in nếu chúng ta có thành phần thực, về cơ bản chúng ta không có con trỏ null và sử dụng một con trỏ khác để

89
00:07:10,930 --> 00:07:17,230
‫cảnh báo nếu chúng ta không quản lý để nắm giữ thành phần đó và thử xóa thành phần để kiểm tra, tạm

90
00:07:17,230 --> 00:07:19,180
‫dừng video và có trước kia.

91
00:07:22,290 --> 00:07:22,770
‫Được chứ.

92
00:07:22,770 --> 00:07:23,690
‫Chào mừng trở lại.

93
00:07:23,700 --> 00:07:33,600
‫Vì vậy, chúng tôi sẽ tạo một thông báo nhật ký mới cho bạn ở đây và chúng tôi sẽ nói rằng có xử lý vật lý dấu hai chấm phần trăm sx

94
00:07:33,600 --> 00:07:40,200
‫và chúng tôi có tên xử lý vật lý này mà tôi sẽ cắt và dán làm đối số thứ hai hoặc

95
00:07:40,200 --> 00:07:43,260
‫các đối số thứ tư vào nhật ký U.

96
00:07:43,320 --> 00:07:46,950
‫Và tôi sẽ đặt một ngôi sao vì nó là một chuỗi.

97
00:07:46,950 --> 00:07:50,250
‫Bây giờ chúng ta hãy thêm một câu lệnh khác bên dưới câu lệnh if của chúng tôi.

98
00:07:50,250 --> 00:07:55,500
‫Và ở đây, chúng tôi sẽ đặt một nhật ký chữ U khác, sẽ là lần

99
00:07:55,500 --> 00:08:02,340
‫này thay vì một màn hình, chúng tôi sẽ đặt một thông báo loại cảnh báo sẽ xuất hiện màu vàng và

100
00:08:02,640 --> 00:08:07,350
‫chúng tôi sẽ nói Không tìm thấy tay cầm vật lý, dấu chấm than.

101
00:08:07,350 --> 00:08:12,960
‫Bây giờ tôi chưa mở trình chỉnh sửa, vì vậy tôi sẽ thực hiện một thay đổi điều khiển B để xây dựng trong

102
00:08:12,960 --> 00:08:17,820
‫mã Visual Studio, đóng thiết bị đầu cuối khi nó thành công và khởi chạy lại từ dự án mới.

103
00:08:17,820 --> 00:08:24,990
‫Sau khi khởi chạy, hãy tiếp tục và nhấn play, mở nhật ký đầu ra và chúng ta sẽ thấy thông báo nhật

104
00:08:24,990 --> 00:08:25,440
‫ký.

105
00:08:25,440 --> 00:08:28,440
‫Có tay cầm vật lý mà tên là.

106
00:08:28,440 --> 00:08:29,790
‫Thật thú vị, tay cầm vật lý.

107
00:08:29,970 --> 00:08:39,510
‫Bây giờ điều gì sẽ xảy ra nếu chúng ta đi đến trình phát tiếng bíp của mình và thực sự loại bỏ xóa tay cầm vật lý đó

108
00:08:39,510 --> 00:08:41,160
‫và tiếp tục và chơi.

109
00:08:41,160 --> 00:08:48,000
‫Bây giờ hãy xem nhật ký đầu ra của chúng tôi và họ đi, chúng tôi đã có một cảnh báo màu vàng rằng không tìm thấy

110
00:08:48,000 --> 00:08:48,840
‫chốt vật lý.

111
00:08:48,840 --> 00:08:50,040
‫Vì vậy, chúng ta hãy dừng cuộc chơi.

112
00:08:50,070 --> 00:08:55,860
‫Hãy tiếp tục và thêm tay cầm vật lý trở lại vì chúng tôi sẽ muốn nó và chúng tôi sẽ cứu người chơi.

113
00:08:55,860 --> 00:08:57,090
‫Bíp Thứ tuyệt vời.

114
00:08:57,090 --> 00:09:03,570
‫Vì vậy, chúng tôi đã tìm ra cách chúng tôi có thể nắm giữ các thành phần khác từ bên trong một thành phần và

115
00:09:03,570 --> 00:09:08,820
‫chúng tôi đã học cách đối phó với con trỏ null và tại sao chúng tôi cần phải cẩn thận.

116
00:09:08,850 --> 00:09:10,500
‫Hẹn gặp lại các bạn trong bài giảng tiếp theo.

