Với câu trả lời tuyệt vời của Sean và Blue về các giới hạn nền tảng vật lý và các quyết định ủng hộ, tôi sẽ mở rộng nhận xét sang một cách tiếp cận khác:
Tại sao bạn chỉ nên tải lại hoàn toàn cấp độ
Vì vậy, bạn đã có cuộc gọi loadLevel () hoạt động hoàn hảo, yay! Bạn truyền phát thông tin tệp cấp độ và từng bước xây dựng thế giới dựa trên nó, tạo các đối tượng và tải kết cấu và âm thanh khi bạn đi. Sau đó, khi tất cả đã xong - hoặc thực hiện "đủ" để cho phép phát bắt đầu, bạn gọi startPlay () và thế giới của bạn được tiết lộ và âm nhạc của bạn bắt đầu phát.
Bây giờ khi bạn hoàn thành cấp độ, hoặc thoát vào menu hoặc thoát khỏi trò chơi, bạn gọi unloadLevel () để giải phóng tất cả tài nguyên và bộ nhớ bạn đang giữ để cho phép trải nghiệm mượt mà.
Bây giờ, điều gì xảy ra khi bạn muốn thêm tính năng "Khởi động lại cấp độ"? Tốt...
unloadLevel(currentLevel);
loadLevel(currentLevel);
startPlay();
Và bạn đã hoàn thành! Không có mã mới, chỉ có một vài chức năng đơn giản gọi và bạn đã viết và gỡ lỗi tất cả, vì vậy bây giờ Tính năng khởi động lại sáng bóng mới của bạn bị loại khỏi danh sách của bạn và có thể không bao giờ gặp lại - mã không bị rỉ sét, không bị rỉ sét là loại tốt nhất! Di chuyển mã vào một hàm restartCienLevel () và bạn có thể gấp mã đó đi và không bao giờ nhìn lại nó - có thể sau khi chắc chắn có một mức để khởi động lại, tất nhiên :)
Nhưng sau đó, bạn tự hỏi nếu điều này không phải là một sự lãng phí, dỡ bỏ những thứ bạn sắp tải lại lần nữa. Chà, nếu mức độ và tài nguyên của bạn nhỏ thì phần lớn bạn phải đạt được là một vài giây thời gian tải dự phòng mỗi lần "Khởi động lại" được gọi ngay cả trên các hệ thống chậm (và có thể là điện thoại thông minh cũ hơn), vậy ai quan tâm? "Tối ưu hóa sớm", bạn có những điều tốt hơn để làm với thời gian của mình.
À, nhưng bây giờ các cấp độ của bạn đang tăng lên và kết cấu của bạn ngày càng chi tiết hơn và nhạc nền đã được trích xuất ở tốc độ 512kbps với các kênh riêng biệt cho mỗi lớp giọng nói và âm nhạc (có vẻ như đó là một ý tưởng tốt vào thời điểm đó, mặc dù bạn không thể nhớ tại sao. ..) và một cái gì đó về "ma trận voxel phụ thuộc nguồn gốc trạng thái truy tìm ma trận biến đổi Fourier đa chiều" mà bạn nghĩ là hoàn toàn được tạo ra và không phải là một điều thực sự, và việc tải cấp thực sự mất một thời gian và nó bắt đầu làm phiền bạn. Bạn thậm chí đã thử nghiệm với người thật và họ thực sự cho thấy sự khó chịu trong thời gian chờ đợi vì nó tệ hơn các trò chơi tương tự (bạn không mong đợi một thành phố thủ đô MMORPG có 100 người chơi tải hoàn toàn trong <2 giây, phải không?), và đó là một vấn đề.
Vậy làm thế nào để bạn tối ưu hóa? Vâng, nếu mức độ tái -loading là một vấn đề, sau đó không phải là mức tải một vấn đề? Nếu bạn nghĩ rằng nó chỉ tải lại, tại sao mọi người lại tải lại cấp độ của bạn thường xuyên hơn nhiều so với việc họ chỉ tải cấp độ ở nơi đầu tiên? Âm thanh giống như một vấn đề chơi trò chơi, không phải là một vấn đề kỹ thuật mã. Ai nghĩ rằng niềm vui của nó để tải lại một cấp độ nhiều lần, và chỉ muốn nó nhanh hơn thay vì hoàn toàn có thể tránh được ?
Khắc phục sự cố thực sự trước!
Nhưng giả sử trò chơi của bạn được thiết kế để thỉnh thoảng bạn phải khởi động lại và thời gian tải đủ lâu để bạn có thể làm một lần và hoàn toàn không thể tránh khỏi, nhưng bạn không muốn phải làm lại. Đây là loại trò chơi gì? Có vẻ như có một chút vấn đề kỳ lạ ... có thể là một trò chơi giống như Cổng thông tin có độ phân giải cao trong đó giả sử bạn sẽ làm xáo trộn câu đố nhiều lần?
Trước hết, bạn phải nhận ra rằng điều này sẽ không tầm thường. Bạn sẽ phải viết mã hoàn toàn mới, chưa được kiểm tra và nó "phụ thuộc vào trạng thái" để bạn thậm chí không biết cái gì sẽ hoặc không được sử dụng lại giữa các lần chơi cấp. Có các yếu tố ngẫu nhiên, sinh sản, kết cấu biến đổi (bộ xương của bạn đôi khi chỉ mặc áo giáp?), Hoặc các yếu tố thay đổi khác trong cấp độ của bạn? Có những thứ khác nhau với người chơi, như một bộ trang phục hoặc mô hình tùy chỉnh hoặc màu sắc / cửa / bẫy?
Bạn sẽ được so sánh, và rất nhiều trong số họ. Bạn sẽ lặp qua các yếu tố cấp độ, so sánh những gì sẽ cần so với những gì được tải ngay bây giờ (bạn sẽ làm gì với những thứ được tải cho cấp độ cuối cùng nhưng không phải là thứ này - giải phóng chúng hoặc giữ lại để ngăn chặn tương lai tải?). Nếu đây thực sự là một vấn đề lớn đối với trò chơi của bạn, có lẽ bạn sẽ muốn thay đổi mã tải / hủy tải của mình để xem có thứ gì đã được tải trước khi tải không (tạo mã đa năng nhưng có khả năng giới thiệu các lỗi mới cho các tính năng và chức năng hoạt động trước đó phát hành cẩn thận các tài nguyên sẽ không được sử dụng trong tương lai gần). Thở dài.
Bất kể bạn làm gì, ngay cả khi trò chơi của bạn đơn giản, bạn sẽ gặp phải các lỗi tối nghĩa dựa trên trạng thái cấp độ / người chơi khi cấp độ được khởi động lại mà bạn không tải cấp lần đầu tiên. Vì vậy, bạn có thể viết cập nhật trò chơi với văn bản như:
"Thả mũ bảo hiểm vào một quả bom vào một viên gạch có tên lửa phát nổ gần nó cũng trong phạm vi 200 pixel nước sẽ không còn làm hỏng dữ liệu trò chơi của bạn hoặc khiến trò chơi bị sập."
Lý do thực sự Hầu hết các trò chơi Đừng làm phiền
Bạn có bao giờ nhận thấy rằng hầu hết mọi người chỉ sơn hoặc vách thạch cao trên các bức tường hiện tại của họ thay vì tước xuống một lớp cơ sở, hoặc trải thảm ngay trên sàn gỗ cứng thay vì kéo chúng lên?
Một thực tế đơn giản là tất cả đều làm việc nhiều hơn để nhận phần thưởng tối thiểu. Vẽ tranh trên các bức tường hiện tại của bạn hoạt động tốt hầu hết thời gian và giá trị của việc xé toạc sàn gỗ cứng thường là tối thiểu hoặc không có.
Điều tương tự cũng đúng trong phần mềm, từ trò chơi đến Bản trình bày Power Point đa phương tiện - nếu tất cả những gì bạn làm là tắt một vài giây trên màn hình tải, mọi người sẽ dành 1% thời gian để xem, thì tốt hơn hết là bạn nên làm hoặc bạn sẽ nhận được lợi nhuận rất kém về thời gian đầu tư của bạn.
Và vì vậy, hầu hết các trò chơi không bận tâm, và tôi gặp khó khăn khi nghĩ về rất nhiều trò chơi trong đó việc tải màn hình làm cho một trò chơi hay khác trở nên ít giá trị hơn, ngoại trừ một vài ví dụ cực đoan; các ví dụ cực đoan là việc tối ưu hóa để tải cấp nhanh hơn có ý nghĩa và đó là một phần nhỏ các trò chơi đưa nó ra công chúng, và thậm chí có thể là một phần nhỏ hơn của các trò chơi mà không ai từng thấy vì chúng không bao giờ được phát hành.