‫Xin chào và chào mừng.
‫Trong bài giảng này, chúng ta sẽ cấu trúc lại trình kích hoạt kéo của mình để nó sẵn sàng cho chúng ta thêm nhiều
‫mã vào.
‫Hiện tại, nó đã thực sự vượt quá tầm kiểm soát, vì vậy chúng tôi sẽ cấu trúc
‫lại nó thành một chức năng nhỏ như thế này thực sự dễ đọc hơn nhiều.
‫Hãy đi sâu vào và xem cách thực hiện tái cấu trúc này.
‫Được chứ.
‫Vì vậy, chúng tôi muốn đưa một số âm thanh vào trò chơi của mình và nơi chúng tôi sẽ làm điều này là trong khẩu súng khi
‫chúng tôi bắn.
‫Đó là cảng đầu tiên của cuộc gọi.
‫Tôi nghĩ rằng một loại âm thanh bắn hay và âm thanh tác động sẽ rất tuyệt.
‫Vấn đề duy nhất là khi tôi quay lại chức năng kích hoạt kéo của chúng tôi, tôi nhận thấy rằng nó quá
‫lớn.
‫Nó không phù hợp với một trong những màn hình của tôi.
‫Cũng hơi khó để đọc và hiểu nơi chúng tôi sẽ đặt chức năng này.
‫Vì vậy, trong khi chúng tôi nỗ lực để thực sự hiểu chức năng ở đây là gì, có lẽ bạn
‫nên thực hiện cấu trúc lại nhanh chóng hoặc rút một số nội dung này sang các phương pháp khác để không quá
‫khó đọc.
‫Bây giờ, nếu bạn xem đoạn mã này và thử tìm ra những thứ cơ bản mà nó đang làm,
‫thì bạn sẽ thấy rằng một phần lớn trong số này thực sự chỉ được thiết lập cho dòng của chúng tôi.
‫Theo dõi toàn bộ đoạn này từ dòng 28 xuống đến dòng 43.
‫Và chúng ta đang làm gì?
‫Chà, chúng tôi đang nhận cầm đồ của chủ sở hữu, sau đó chúng tôi đang kiểm tra việc lấy bộ điều khiển của chủ sở hữu, sau
‫đó chúng tôi nhận được khung nhìn từ đó, sau đó chúng tôi sẽ nhận được vị trí cuối dựa trên phạm vi tối đa.
‫Sau đó, chúng tôi chuyển một số tham số lần truy cập để bỏ qua nội dung.
‫Tất cả những điều này chỉ được thiết lập cho dấu vết dòng của chúng ta, vậy tại sao chúng ta không trích xuất nó thành chức năng của riêng nó ở
‫đây?
‫Tôi sẽ tạo một chức năng riêng tư mới ở dưới cùng.
‫Sau khi các biến của chúng ta, nó sẽ là bool return vì về cơ bản chúng ta muốn thay thế lệnh gọi này ở đây để
‫trả về thành công bằng một lệnh chỉ cung cấp cho chúng ta kết quả lần truy cập.
‫Vì vậy, chúng tôi sẽ làm điều này như một cái gì đó tôi sẽ gọi là một chức năng theo dõi súng và nó sẽ có một
‫số tham số ở đây.
‫Cụ thể, một trong số chúng sẽ là kết quả trúng đích.
‫Vì vậy, hãy nhấn vào kết quả, ký hiệu và để làm cho nó trở thành một tham chiếu.
‫Và bởi vì nó không phải là một tham chiếu cố định, chúng tôi biết nó là một tham số out.
‫Chúng tôi gọi đây là cú đánh.
‫Và thực sự có thể có một cái khác mà chúng ta cần ở đây.
‫Cụ thể, tôi có thể thấy rằng chúng ta có vòng xoay đang thoát ra từ đoạn mã này và trên thực tế, chúng tôi đang phủ nhận
‫sự xoay vòng đó.
‫Vì vậy, những gì chúng tôi thực sự quan tâm là hướng bắn.
‫Vì vậy, có lẽ đó là những gì chúng ta cần phải làm.
‫Vì vậy, tôi sẽ tạo một tham số véc tơ F, vì vậy véc tơ F ký hiệu và và nó sẽ là
‫hướng bắn.
‫Đây là hai đầu ra sẽ đến từ dấu vết súng của chúng ta.
‫Bây giờ chúng ta hãy tiếp tục và tạo triển khai ở đây.
‫Và những gì chúng tôi muốn làm về cơ bản chỉ là sao chép tất cả đoạn mã này vào đó.
‫Xem nó như thế nào.
‫Và chúng tôi cũng muốn kiểm tra cảnh quay này.
‫Hướng đi.
‫Lấy nó ra và dán nó vào ngay trước khi kết thúc.
‫Hoặc có thể chỉ ở đây sau khi chúng tôi đã có khung nhìn người chơi, chúng tôi có thể đặt hướng bắn
‫cần bằng với chiều quay tiêu cực.
‫Nhưng điều quan trọng cần lưu ý ở đây là thực sự chúng tôi muốn đặt không phải là một biến cục bộ.
‫Vì vậy, nếu bạn đặt loại ở đây, nó sẽ thiết lập một hướng chụp cục bộ.
‫Chúng tôi muốn xóa điều đó để nó thiết lập hướng bắn trong các thông số, điều này thực sự có nghĩa
‫là nó đang thiết lập hướng bắn mà chúng ta sẽ chuyển vào trong hàm gọi nó.
‫Tương tự đối với hit.
‫Chúng ta cần loại bỏ hit cục bộ này để hit được chuyển thành dấu vết từng kênh một là hit đã được
‫chuyển thành dấu vết súng.
‫Và cuối cùng, có điều gì khác là dây chuyền này để làm mà bây giờ không cần thiết và đây cũng là thành
‫công?
‫Chà, chúng ta chỉ cần trả về kết quả của tín hiệu vạch đường theo kênh.
‫Đó là việc liệu dấu vết súng của chúng ta có thành công hay không.
‫Vì vậy, chúng tôi đã thành công trong việc giảm thụt lề này đi một chút.
‫Giờ đây, chúng ta có thể sắp xếp tất cả trên một màn hình và dễ hiểu hơn một chút rằng, vâng,
‫tất cả những điều này đều liên quan đến việc lấy dấu vết súng.
‫Chúng ta có thể tăng điểm CP cho súng của mình Và bây giờ chúng ta có thể thiết lập thành công B của chúng ta ở đây.
‫Vì vậy, thành công của bool B, chúng tôi sẽ cần đặt làm dấu vết súng và chúng tôi cần chuyển một số tham số ở đây.
‫Vì vậy, chúng ta vẫn cần phải khai báo chúng ở đâu đó nếu kết quả trúng đích.
‫Nó sẽ là một trong số họ.
‫Tôi sẽ gọi là hit.
‫Và cái còn lại sẽ là một vectơ F được gọi là hướng bắn.
‫Và những thứ đó sẽ được chuyển vào.
‫Vì vậy, chúng ta sẽ có cú đánh đầu tiên, sau đó là hướng bắn.
‫Và sau đó là dấu chấm phẩy ở cuối đó.
‫Vì vậy, điều đó sẽ làm cho điều đó dễ dàng hơn một chút.
‫Tuy nhiên, tôi nhận thấy rằng chúng tôi cũng cần bộ điều khiển của chủ sở hữu và tôi không muốn dấu vết khẩu súng có trách nhiệm đối với
‫bộ điều khiển của chủ sở hữu hoặc quên bộ điều khiển của chủ sở hữu.
‫Điều đó không có vẻ như trách nhiệm của một dấu vết súng để làm điều đó.
‫Nghe có vẻ ổn cho nó để đạt được một hit.
‫Nó có vẻ ổn để nó có được hướng bắn.
‫Nhưng tôi sẽ vạch ra ranh giới khi có được bộ điều khiển chủ sở hữu.
‫Vì vậy, tôi sẽ đưa nó vào, đặt tất cả mã này vào một hàm khác mà cả hai đều
‫có thể gọi.
‫Vì vậy, đó sẽ là một hàm trả về một bộ điều khiển.
‫Ngôi sao.
‫Và chúng tôi sẽ gọi nó là bộ điều khiển vượt qua và chúng tôi có thể biến nó thành một buổi hòa nhạc.
‫Như chúng ta đã biết, nó không có nghĩa là thay đổi bất kỳ biến nào trên lớp súng của chúng ta.
‫Hãy tạo triển khai đó.
‫Chỉ cần thực hiện từ dấu vết súng, sửa bất kỳ vết lõm nào nếu cần, và chúng tôi sẽ tiếp tục và chỉ
‫cần trả lại quyền kiểm soát của chủ sở hữu.
‫Vì vậy, không cần phải kiểm tra null ở đây.
‫Kiểm tra null đó chúng ta cần thực hiện trong hàm đang sử dụng nó.
‫Vì vậy, chúng tôi sẽ đưa nó lên đó.
‫Chúng tôi cũng không cần đặt một biến ở đây.
‫Chúng ta chỉ có thể đi trước và quay trở lại.
‫Vì vậy, nó sẽ khá đơn giản.
‫Tôi nhận được trên một bộ điều khiển, nhưng không hoàn toàn.
‫Và sau đó chúng ta sẽ thiết lập biến trong dấu vết súng.
‫Vì vậy, bộ điều khiển chủ sở hữu sẽ trở thành bộ điều khiển chủ sở hữu như vậy.
‫Mà sau đó, chúng tôi thực hiện trả về null để trả về sớm null trong dấu vết súng, nhân tiện, nó cần trả
‫về một boolean vì dấu vết súng đang trả về một boolean.
‫Vì vậy, chúng tôi có thể tiếp tục và trả về false ở đây bởi vì nếu chúng tôi không thể có được bộ điều khiển của chủ sở hữu, chúng tôi không thể tìm ra dấu
‫vết súng.
‫Vì vậy, chúng tôi không thể đánh bất cứ thứ gì.
‫Và sau đó, chúng tôi cũng cần bộ điều khiển chủ sở hữu đó nâng cao hơn nữa.
‫Nơi chúng tôi có diễn viên nổi tiếng của mình, chúng tôi đang làm điều này bị thiệt hại.
‫Và về cơ bản những gì chúng tôi muốn làm ở đây là có được bộ điều khiển chủ sở hữu ngay tại đây bên trong diễn viên ăn khách của chúng tôi.
‫Vì vậy, nếu chúng ta đánh một tác nhân, chúng ta sẽ có lại người điều khiển chủ sở hữu.
‫Bây giờ, tôi biết có một chút tiếng kêu của máy dò súng.
‫Nhận một bộ điều khiển và sau đó chúng tôi sẽ làm lại nếu chúng tôi đụng phải một diễn viên.
‫Nhưng điều đó chỉ xảy ra mỗi khi chúng tôi đụng phải một diễn viên.
‫Vì vậy, tôi không phiền khi phải tính toán lại hai lần vì nó sẽ làm cho mã dễ đọc hơn một chút mà
‫không cần phải lưu trữ các biến và trạng thái có thể không đồng bộ.
‫Vậy là xong.
‫Bây giờ chúng tôi đã có bộ điều khiển chủ sở hữu mà chúng tôi cần để chống lại thiệt hại và trình kích hoạt kéo của chúng tôi trông tốt
‫hơn nhiều.
‫Vì vậy, đó là nó cho bài giảng này.
‫Một nhanh chóng.
‫Chỉ cần cấu trúc lại trình kích hoạt kéo của chúng tôi để chúng tôi có cơ sở tốt để làm việc trong bài giảng tiếp theo và tôi sẽ gặp
‫bạn ở đó.
‫Ồ, và có vẻ như tôi đã thực hiện một chút điều cấm kỵ ở đây trong bộ điều khiển get chủ sở hữu.
‫Nếu bạn thử và biên dịch nó, nó sẽ không làm được gì vì giá trị trả về này không thực sự trả về
‫một con trỏ.
‫Vì vậy, chúng tôi muốn trả về con trỏ null trong trường hợp này ngay lập tức.
‫Về cơ bản, chúng ta không thể cầm đồ, sau đó chúng ta không thể kiếm điều khiển.
‫Vì vậy, chúng tôi trả về con trỏ null.