Làm thế nào tôi nên xử lý các tài nguyên bị thiếu?


13

Trò chơi của bạn hy vọng một tài sản nhất định sẽ được tải, nhưng nó không được tìm thấy. Tình hình nên được xử lý như thế nào? Ví dụ:

Texture* grassTexture = LoadTexture("Grass.png"); // returns NULL; texture not found
Mesh* car             = LoadMesh("Car.obj");      // returns NULL; 3D mesh not found

Nó có thể đã vô tình bị xóa bởi người dùng, bị lỗi hoặc sai chính tả khi đang phát triển.

Một số câu trả lời tiềm năng:

  • Các xác nhận (lý tưởng chỉ trong quá trình phát triển)
  • Thoát khỏi trò chơi một cách duyên dáng
  • Ném một ngoại lệ và cố gắng xử lý nó.

Cách nào là tốt nhất?


Một cách để làm điều đó là xác minh nếu dữ liệu trò chơi vẫn còn nguyên vẹn. Nếu không tự động tải lại dữ liệu còn thiếu. lỗi> yêu cầu người dùng xác minh dữ liệu> tải xuống. Bạn rõ ràng cần phải tạo ra một công cụ nhỏ cho việc này.
Sidar

@Sidar Tôi thích những gì bạn nói nhiều hơn câu trả lời được bình chọn nhiều nhất có lẽ bạn có thể giải thích rõ hơn những gì bạn đang cố gắng nói
khái niệm3d

Lỗi sai là đôi khi nó chỉ phá vỡ trò chơi và mọi người không thể chơi / khởi động nó. Trong Steam chẳng hạn nếu trò chơi của bạn không hoạt động chính xác, bạn có thể xác minh dữ liệu trò chơi. Khi một cái gì đó có vẻ bị hỏng / thiếu / thay đổi, Steam sẽ tự động tải xuống lại các tệp đó. Tôi không biết chính xác làm thế nào họ làm điều đó. Nhưng rõ ràng họ kiểm tra nó chống lại một số dữ liệu. Có lẽ mã băm? Tôi thực sự không biết. Nhưng bạn phải luôn có một tài sản thay thế tiêu chuẩn (đơn giản là kết cấu có "lỗi" trên đó hoặc một cái gì đó)
Sidar 11/11/13

@Sidar tại sao không định dạng độc đáo trong một câu trả lời?
Concept3d

Bởi vì tôi không biết chính xác nó hoạt động như thế nào và không muốn hiểu sai về nó. Vì vậy, tôi không thể cho bạn một câu trả lời thích hợp.
Sidar 11/11/13

Câu trả lời:


19

Rất nhiều trò chơi có một "tài liệu lỗi" và "lưới lỗi" chung thực sự rõ ràng để xem. Tất nhiên, kết hợp điều này với một cảnh báo trong nhật ký.


Hoàn toàn đồng ý với bài này. Tuy nhiên, bạn có thể muốn làm những việc khác nhau trong một bản phát hành / bản phân phối.
Jonkel

Đối với các bản dựng phát hành, người ta có thể nghĩ đến một sự chấp thuận để xác thực các tệp có sẵn bằng cách sử dụng băm để tải xuống các tệp bị thiếu hoặc không hợp lệ. Tuy nhiên, trong quá trình phát triển, nó chắc chắn là cách tốt nhất để hiển thị kết cấu bàn cờ đen và đỏ tươi để thu hút sự chú ý của bạn. Đối với các mô hình, người ta có thể sử dụng một mô hình LRI lớn, điều này là hiển nhiên.
Christian Ivicevic

Điều này có ý nghĩa đối với Hoạ tiết. không quá nhiều cho Mô hình 3D. Điều gì xảy ra nếu hầu hết các mô hình 3D bị thiếu? Trò chơi sẽ trông buồn cười, trong khi nó nên được chơi ngay từ đầu. Điều gì sẽ xảy ra nếu bạn tính toán cấu trúc dữ liệu không gian của mình dựa trên các thuộc tính hình học của Mô hình 3D những gì sẽ xảy ra. Tôi với điều này chỉ trong trường hợp đơn giản như thiếu kết cấu. Nhưng tôi nghĩ rằng kiểm tra tính đầy đủ dữ liệu chỉ là cách tiếp cận tốt hơn cho các trò chơi thương mại.
Concept3d

1
@ concept3d - Tôi biết ít nhất Công cụ nguồn có một lưới lỗi lớn, rõ ràng (thỉnh thoảng tôi đã thấy nó trong ứng dụng khách thử nghiệm Dota 2, trở lại khi họ thêm anh hùng). Tôi đồng ý rằng nếu thiếu một lượng lớn dữ liệu cấp độ, có lẽ tốt nhất là bạn nên sửa lỗi, đặc biệt là trong bản dựng phát hành, nhưng với mục đích gỡ lỗi có một dấu hỏi lớn nhảy xung quanh thì không quá tệ.
Robert Fraser

6

Nếu bạn có tài sản có độ phân giải khác nhau của kết cấu tương tự , bạn có thể cố gắng cứu vãn tình hình bằng cách sử dụng một độ phân giải khác nhau.

Texture* grassTexture;
try {
    grassTexture = LoadTexture("Grass.png");
} catch (WhateverExcaption e) {
    grassTexture = LoadTexture("Grass_512.png");
}

Nếu thậm chí thất bại, nó có thể là thời gian để giải cứu.


2
Bạn có thể thêm một nút chuyển đổi để bắt vì vậy trong Dev bạn luôn hiển thị lưới / tex bị thiếu nhưng khi Xuất bản, nó sẽ cố gắng khôi phục trước và có thể có kết cấu bị thiếu ít rõ ràng hơn.
DampeS8N
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.