‫Xin chào và chào mừng trở lại.
‫Bây giờ chúng tôi có chuyển động cho -, nhưng chúng tôi không xoay phần trên cùng của -, mà chúng tôi gọi là
‫tháp pháo.
‫Vì vậy, chúng tôi muốn có thể làm điều đó bằng cách sử dụng chuột của mình.
‫Bây giờ, hãy xem những gì đang xảy ra ở đây.
‫Khi tôi đang di chuyển con trỏ chuột của mình trên khắp thế giới, tôi nhận được quả cầu màu đỏ này.
‫Đây là hình cầu gỡ lỗi mà tôi đang vẽ trong không gian 3D.
‫Bây giờ hãy chú ý khi tôi di chuyển lên dựa vào một bức tường, quả cầu đó sẽ di chuyển trên bề mặt của bức tường.
‫Vì vậy, bất cứ nơi nào con trỏ chuột của tôi đang di chuyển, tôi sẽ nhận được nỗi sợ hãi này tương ứng với bất kỳ đối tượng
‫nào tôi đang chạm vào dựa trên vị trí con trỏ của tôi.
‫Và điều này sẽ hữu ích cho chúng tôi để chúng tôi có thể có một vị trí trong không gian mà chúng tôi có thể xoay tháp pháo
‫của mình theo hướng.
‫Bây giờ, để làm điều này, có một số chức năng chúng ta cần trên bộ điều khiển, vì vậy chúng ta phải truy cập các chức
‫năng đó trên bộ điều khiển.
‫Và trong video này, chúng tôi sẽ bắt đầu thiết lập điều đó và chúng tôi cũng sẽ thảo luận về cách
‫điều này sẽ liên quan đến một khái niệm được gọi là truyền.
‫Bây giờ, lý do chúng ta muốn bộ điều khiển là vì có các chức năng trên bộ điều khiển cho phép
‫chúng ta lấy kết quả đánh dưới con trỏ.
‫Bây giờ chúng ta đang nói về con trỏ chuột.
‫Vì vậy, giả sử đây là màn hình của chúng tôi và đây là con trỏ chuột của chúng tôi.
‫Và điểm ở đầu con trỏ tương ứng với một vị trí trên màn hình.
‫Bây giờ nếu chúng ta di chuyển con trỏ xung quanh, mục tiêu của chúng ta là phần tháp pháo của xe tăng,
‫phần trên cùng của lưới của chúng ta sẽ xoay để nó đối diện với hướng của con trỏ đó.
‫Bây giờ nếu chúng ta di chuyển con trỏ xung quanh, có một chức năng trên bộ điều khiển mà chúng ta có thể sử dụng
‫để lấy vị trí tương ứng với con trỏ đó.
‫Nếu chúng ta vẽ một đường thẳng từ máy ảnh về phía con trỏ và chạm vào một vật thể nào đó
‫trên thế giới, chúng ta có thể lấy vị trí đó và sử dụng vị trí đó để thiết lập vòng quay cho tháp pháo xe tăng.
‫Hãy để tôi chỉ cho bạn những gì tôi muốn nói.
‫Bây giờ, để có được vị trí truy cập này tương ứng với con trỏ của chúng ta, chúng ta cần sử dụng bộ điều khiển.
‫Bây giờ, hãy nói về bộ điều khiển một chút.
‫Giả sử chúng ta có con đường cầm đồ trên thế giới.
‫Một người cầm đồ sẽ có một người kiểm soát.
‫Đây là một đối tượng vô hình liên quan đến cầm đồ.
‫Bây giờ, đối với con tốt của chúng tôi, bộ điều khiển của chúng tôi sẽ có bộ điều khiển người chơi loại A
‫và vào đầu trò chơi, bộ điều khiển sẽ sở hữu con tốt.
‫Đây là lý do tại sao chúng ta có thể nhìn thấy từ góc nhìn của camera thuộc về bể cầm đồ của chúng ta.
‫Bây giờ chúng ta có thể truy cập bộ điều khiển này.
‫Lớp xe tăng của chúng tôi kế thừa một chức năng được gọi là Get Controller.
‫Nó được kế thừa từ - class.
‫Vì vậy, những gì chúng ta muốn làm là nắm giữ bộ điều khiển đó và lưu trữ nó trong một biến để chúng ta có thể sử
‫dụng nó để truy cập vào hàm chúng ta cần để lấy kết quả truy cập dưới con trỏ.
‫Vì vậy, chúng ta hãy tự thiết lập cho mình điều đó.
‫Bây giờ tôi đang ở đây trong lớp xe tăng và nơi chúng tôi cần truy cập bộ điều khiển của mình là bắt đầu chơi.
‫Nếu chúng ta thực hiện điều đó trong hàm tạo thì quá sớm và chúng ta có thể chưa có bộ điều khiển hợp lệ.
‫Vì vậy, chúng tôi sẽ cần chức năng chơi bắt đầu ở đây trong hạng xe tăng.
‫Bây giờ chúng tôi có nó ở đây trong lớp bóng bàn cơ bản và cho đến nay chúng tôi không thực sự sử dụng trò chơi bắt đầu trong lớp
‫bóng bàn cơ bản.
‫Vì vậy, những gì tôi muốn làm là chuyển nó sang hạng xe tăng.
‫Vì vậy, tôi sẽ đánh dấu phần bắt đầu chơi, bao gồm nhận xét và phần được bảo vệ ở đây và tôi chỉ đơn
‫giản là sẽ cắt nó.
‫Và sau đó trở lại giai đoạn xe tăng, tôi sẽ dán nó.
‫Hãy thêm phần được bảo vệ này vào đây ngay phía trên phần riêng tư với bắt đầu chơi bên trong.
‫Bây giờ chúng tôi đã loại bỏ Begin Play khỏi cầm đồ cơ sở.
‫Chúng tôi không còn có nó ở đây nữa, nhưng chúng tôi cũng cần phải loại bỏ nó khỏi cpp ao cơ sở.
‫Nó đây.
‫Chúng ta có thể tiếp tục và xóa nó ở đây và bây giờ chúng ta đã khai báo nó ở đây trong Xe tăng H, nhưng chúng ta
‫cũng cần xác định nó trong CPP của xe tăng.
‫Vì vậy, tôi sẽ xác định chức năng ngay dưới thành phần đầu vào trình phát thiết lập.
‫Vì vậy, nó sẽ không có giá trị bắt đầu chơi mà không có tham số đầu vào.
‫Có phần thân chức năng và chúng tôi cũng cần một bể chứa sửa tên chức năng.
‫Bây giờ chúng tôi biết điều quan trọng là phải gọi siêu lớn trong cuộc chơi.
‫Vì vậy, theo cách đó, bất kỳ chức năng nào trong hàm begin play và bất kỳ lớp cha nào sẽ vẫn
‫được gọi.
‫Vì vậy, ở đây chúng ta đã bắt đầu chơi.
‫Đây là nơi chúng ta có thể lấy bộ điều khiển của mình và lưu trữ nó trong một biến.
‫Vì vậy, hãy quay lại Tank H và tạo một biến.
‫Bây giờ điều này sẽ ở chế độ riêng tư và tôi sẽ đưa nó xuống đây ở cuối
‫phần riêng tư và nó sẽ là loại con trỏ bộ điều khiển trình phát và chúng ta có thể gọi đây là giới thiệu bộ điều khiển trình phát này.
‫Đây sẽ là tham chiếu của chúng tôi đến bộ điều khiển trình phát.
‫Bây giờ chúng ta không nói về tham chiếu C ++.
‫Đây vẫn chỉ là một con trỏ, nhưng chúng tôi sẽ sử dụng nó để chỉ bộ điều khiển trình phát.
‫Vì vậy, bây giờ chúng tôi có biến ref của bộ điều khiển trình phát loại A và chúng tôi đã sẵn sàng lưu trữ
‫bộ điều khiển trong con trỏ này.
‫Vì vậy, hãy quay lại Tank Dot CP tại đây và bắt đầu chơi và cố gắng thực hiện điều này.
‫Vì thế.
‫Những gì tôi sẽ làm là nói player, controller, ref bằng và tôi sẽ cố gắng gọi get controller.
‫Bây giờ hãy lấy bộ điều khiển, như tôi đã đề cập là trên - class.
‫Hãy nhấp chuột phải và đi đến định nghĩa và nhận thấy rằng hàm này trả về một bộ điều khiển A.
‫Bây giờ biến của chúng ta thuộc loại A player controller, không phải là controller.
‫Vì vậy, những gì chúng tôi đang cố gắng làm ở đây là lấy giá trị trả về từ bộ điều khiển get, thuộc loại con trỏ bộ
‫điều khiển và chúng tôi đang cố gắng lưu trữ nó trong một con trỏ bộ điều khiển trình phát A.
‫Chú ý chúng ta thấy chữ nguệch ngoạc màu đỏ ở đây.
‫Nó cho biết một giá trị của loại.
‫Một con trỏ bộ điều khiển không thể được gán cho một thực thể của loại.
‫Một bộ điều khiển máy nghe nhạc.
‫Chúng tôi đang gặp lỗi.
‫Hãy xem tài liệu về bộ điều khiển ở đây.
‫Hãy xem.
‫Đây là một bộ điều khiển.
‫Và nó nói lên sự kế thừa, thứ bậc.
‫Và bên dưới một bộ điều khiển, chúng ta thấy một bộ điều khiển và một bộ điều khiển trình phát.
‫Điều này có nghĩa là bộ điều khiển trình phát là một lớp con của bộ điều khiển.
‫Bây giờ, trong C ++, chúng ta không thể có một con trỏ kiểu.
‫Bộ điều khiển trình phát lưu trữ giá trị địa chỉ của bộ điều khiển A.
‫Bộ điều khiển là kiểu mẹ.
‫Bộ điều khiển trình phát là loại con.
‫Bạn không thể lấy một đối tượng kiểu mẹ và lưu trữ nó trong một con trỏ kiểu con.
‫Vậy làm cách nào để giải quyết vấn đề này?
‫Vì vậy, đây là vấn đề của chúng tôi.
‫Hàm get controller trả về địa chỉ của một controller A.
‫Bây giờ, đây là thứ chúng ta có thể lưu trữ trong con trỏ bộ điều khiển A, nhưng chúng ta không thể lưu trữ nó trong con trỏ bộ
‫điều khiển trình phát A.
‫Tuy nhiên, điều buồn cười là đối tượng được trả về bởi get controller thực chất là một player controller.
‫Vì vậy, chúng tôi có địa chỉ này ở dạng con trỏ bộ điều khiển A và chúng tôi biết nó lưu trữ bộ điều khiển trình phát, nhưng nếu chúng
‫tôi có địa chỉ này ở dạng bộ điều khiển A, chúng tôi không thể truy cập chức năng mà chúng tôi cần vì
‫nó tồn tại trên bộ điều khiển trình phát .
‫Hàm được gọi là get hit result dưới con trỏ.
‫Bây giờ nếu chúng ta có giá trị của con trỏ bộ điều khiển loại A và chúng ta cố gắng lấy chức năng đó tồn tại
‫trên bộ điều khiển trình phát, chúng ta sẽ không thực hiện được.
‫Chúng tôi sẽ gặp lỗi biên dịch.
‫Vì chúng ta biết bản thân đối tượng là một bộ điều khiển trình phát, nó chỉ được lưu trữ trong một con trỏ bộ điều khiển A.
‫Làm thế nào để chúng ta giải quyết vấn đề này?
‫Câu trả lời là chúng ta phải cast.
‫Chúng ta biết rằng một bộ điều khiển là lớp cha và một bộ điều khiển trình phát là lớp con.
‫Và chúng tôi biết rằng chúng tôi không thể có bộ điều khiển A được lưu trữ trong con trỏ bộ điều khiển A player.
‫Chúng tôi biết chúng tôi có thể đi ngược lại và có một kho lưu trữ con trỏ bộ điều khiển A, một đối tượng của bộ điều
‫khiển trình phát.
‫Trên thực tế, đó là những gì chúng ta đang thấy khi chúng ta gọi get controller, nó trả về một con trỏ bộ điều khiển
‫A trỏ đến bộ điều khiển A player.
‫Vì vậy, nếu chúng ta có giá trị của con trỏ bộ điều khiển loại A, chúng ta có thể sử dụng một chức năng đặc biệt gọi là
‫ép kiểu để chuyển đổi loại con trỏ thành con trỏ bộ điều khiển trình phát A.
‫Vì vậy, ép kiểu thay đổi kiểu của con trỏ này thành kiểu con trỏ khác miễn là bản thân đối tượng là kiểu mà chúng
‫ta đang cố gắng ép kiểu.
‫Bây giờ, nếu chúng tôi cố gắng truyền sang một kiểu không hợp lệ, chẳng hạn, chúng tôi có một con trỏ bộ điều khiển A trỏ
‫đến đối tượng bộ điều khiển trình phát.
‫Nếu chúng ta cố gắng ép kiểu, một ký tự, thì hàm ép kiểu trả về giá trị null và chúng ta nói rằng chúng ta ép kiểu
‫không thành công.
‫Vì vậy, hàm ép kiểu trông như thế này.
‫Đó là một mẫu giống như tạo đối tượng phụ mặc định.
‫Hàm mẫu này sẽ thích ứng với kiểu đã chọn và trong hàm này, kiểu chúng ta nhập vào cũng là kiểu
‫chúng ta đang truyền.
‫Vì vậy, chúng tôi vượt qua loại đó.
‫Chúng tôi muốn ép hai bên trong dấu ngoặc nhọn và chúng tôi chuyển con trỏ mà chúng tôi muốn truyền vào
‫trong dấu ngoặc.
‫Đây là một ví dụ.
‫Giả sử chúng tôi muốn truyền tới bộ điều khiển trình phát và con trỏ thuộc loại bộ điều khiển loại A.
‫Chúng ta chuyển con trỏ vào trong dấu ngoặc đơn và kiểu mà chúng ta đang truyền đến trong dấu ngoặc nhọn.
‫Và những gì được trả về là một giá trị của con trỏ bộ điều khiển trình phát loại A.
‫Vì vậy, đây là lệnh gọi hàm trong đó chúng ta chuyển kiểu trong dấu ngoặc nhọn và giá trị con trỏ bộ điều
‫khiển A mà chúng ta nhận được trả về từ bộ điều khiển get có thể đi trong dấu ngoặc đơn.
‫Vì vậy, chúng ta cần ép giá trị này mà chúng ta nhận được từ bộ điều khiển get.
‫Đó sẽ là thách thức của bạn.
‫Vì vậy, trong Begin Play, hãy sử dụng chức năng get controller và chuyển giá trị đó vào hàm cast và truyền tới
‫bộ điều khiển trình phát.
‫Và sau đó, bạn có thể lưu trữ kết quả trong con trỏ tham chiếu bộ điều khiển trình phát của chúng tôi, con trỏ này thuộc
‫loại A.
‫Tạm dừng video và thực hiện diễn viên.
‫Được chứ.
‫Vì vậy, chúng tôi gần như đã hoàn thành tất cả công việc ở đây, chúng tôi chỉ cần truyền.
‫Vì vậy, những gì chúng ta sẽ làm là gọi hàm ép kiểu, hàm này có dấu ngoặc nhọn cũng như dấu ngoặc đơn.
‫Và những gì nằm trong dấu ngoặc đơn là giá trị mà chúng ta muốn truyền.
‫Bây giờ get controller trả về một con trỏ của Type A controller.
‫Tôi sẽ chuyển điều đó ngay tại đây vào trong ngoặc đơn.
‫Và loại mà chúng tôi đang sử dụng là một bộ điều khiển trình phát.
‫Vì vậy, một lần nữa chúng tôi đang lấy giá trị được trả về bởi get comptroller.
‫Điều này trả về một con trỏ comptroller hoặc một địa chỉ.
‫Sau đó, chúng tôi sử dụng cast để truyền nó tới một bộ điều khiển người chơi A.
‫Chúng ta biết rằng đối tượng được bộ điều khiển cổng trả về là đối tượng bộ điều khiển trình phát A được lưu trữ trong con trỏ
‫bộ điều khiển A.
‫Vì vậy, sau khi chúng tôi truyền nó, thứ được trả lại là một con trỏ của bộ điều khiển trình phát loại A.
‫Vì vậy, chúng tôi đang lưu trữ nó trong ref của trình điều khiển trình phát.
‫Bây giờ chúng ta có quyền truy cập vào bộ điều khiển ở dạng con trỏ bộ điều khiển trình phát A, chúng ta có thể truy
‫cập vào chức năng chúng ta cần để lấy kết quả truy cập theo dõi dưới con trỏ.
‫Vì vậy, tóm lại, chúng tôi đã sử dụng get controller để có quyền truy cập vào controller.
‫Chúng tôi cũng sử dụng chức năng ép kiểu để truyền từ con trỏ bộ điều khiển loại A sang con trỏ bộ điều khiển trình phát
‫loại A.
‫Bây giờ chúng ta có thể truy cập vào chức năng mà chúng ta cần, đó là nhận kết quả lượt truy cập dưới con trỏ tồn tại
‫trên lớp A player controller.
‫Vì vậy, chúng ta sẽ bắt đầu sử dụng chức năng này trong video tiếp theo.
‫Tôi sẽ gặp bạn sớm.