2009-03-30 22 views
14

Ví dụ: trong Fallout 3, trò chơi lưu lưu trữ trạng thái và vị trí của mọi đối tượng và NPC đơn lẻ trong trò chơi và chỉ chiếm vài MB. Làm thế nào để họ làm điều đó!?!?Làm cách nào để các trò chơi video lưu trữ/truy xuất một lượng lớn dữ liệu?

Và sau đó, trong khi chơi trò chơi, dữ liệu này được thêm/lấy vào/ra khỏi bộ nhớ sao cho dữ liệu đó có thể được hiển thị cho người chơi trong thời gian thực?

CẬP NHẬT: (Tôi sẽ làm cho bạn làm việc cho câu trả lời của bạn: P)

Dựa trên câu trả lời Kevin Crowell của ... Vì vậy, tôi đoán bạn sẽ có một khoảng cách vẽ đó sẽ áp dụng đối với đối tượng và NPC, và bạn sẽ "CHỌN" các đối tượng và NPC trong phạm vi nhất định. Tuy nhiên, bạn sẽ sử dụng loại lưu trữ dữ liệu nào để có được các đối tượng này?

Nói cách khác, bạn sẽ có một mảng khổng lồ của mọi đối tượng trong trò chơi và liên tục cập nhật danh sách nhỏ hơn chứa các đối tượng hiển thị để hiển thị?

Ngoài ra, mỗi câu trả lời của Chaos ... Sẽ xảy ra nếu bạn cuối cùng chạm vào mọi đối tượng trong trò chơi? Trò chơi tiết kiệm của bạn sẽ ngày càng lớn hơn? Trong trường hợp của Fallout 3, tôi khá chắc chắn không có "giai đoạn", nơi mà các dữ liệu trong quá khứ chỉ có thể được giảm xuống. Mọi thứ đều tồn tại khi bạn rời khỏi/quay lại một vị trí. Vì vậy, làm thế nào để bạn nghĩ rằng trường hợp cụ thể này được thực hiện?

Trả lời

12

Với tất cả các ổ đĩa cứng lớn hiện nay, thậm chí các nhà phát triển dường như quên có bao nhiêu byte trong một megabyte. Vì vậy, để trả lời câu hỏi trong tiêu đề: trò chơi lưu trữ lượng lớn dữ liệu bằng cách tạo các savegames có dung lượng lớn megabyte.

Để minh họa megabyte lớn cỡ nào, đó là 8 triệu bit. Đó là đủ để mã hóa 2^8000000 = 10^2666666 tiểu bang. Trong khi đó, chỉ có 10^80 nguyên tử trong vũ trụ. Bây giờ trong một trò chơi (lưu) có nhiều hệ thống con với các trạng thái riêng biệt; ví dụ. trong RPG, mỗi NPC có trạng thái riêng. Nhưng bao nhiêu của một nhà nước là có, thực sự? Vị trí của họ trong một thị trấn có thể được lưu dưới dạng 16 bit (bạn có nhớ chính xác là chính xác vị trí của họ không?). Tâm trạng của họ/bố trí/vv là 8 bit khác, và điều đó cho phép nhiều cảm xúc hơn sau đó một số người có.

Khi lưu trữ loại dữ liệu này trong trò chơi, cơ sở hạ tầng điển hình là một QuadTree. Đây là một cơ sở hạ tầng cho phép bạn xác định các đối tượng trong một vùng X-Y nhất định trong O (log N). Trong một số trường hợp, nhà phát triển trò chơi tìm thấy nó dễ dàng hơn để phân vùng trước thế giới trong khu vực. Điều này làm giảm số lần tính toán thời gian chạy. Một ví dụ điển hình là Doom. Bản đồ của nó có khả năng hiển thị được tính toán trước; cho mỗi điểm có thể xác định một cách nhanh chóng đến vùng nào thuộc về nó, và đối với mỗi vùng, số lượng các đối tượng nhìn thấy được tính toán trước. Điều này làm giảm số lượng các đối tượng cần kiểm tra khả năng hiển thị thời gian chạy.

+0

Dude .. không bỏ phiếu hoặc bất cứ điều gì nhưng làm thế nào trên trái đất bạn có biết số lượng nguyên tử trong vũ trụ? (Tôi không yêu cầu một nguồn tôi đang làm cho điểm mà theo như tôi biết họ đã không tìm ra khi nó kết thúc được nêu ra.) Bạn có nghĩa là trong thiên hà? Điều đó sẽ hợp lý hơn một chút. – fauxCoder

+3

10^69 trong thiên hà của chúng ta. Ranh giới chính xác không quan trọng lắm, thực sự. Có rất nhiều sai sót trong đó 10^80 ước tính cho một số lý do. – MSalters

+0

Xin lỗi chủ đề tắt nhưng [video này] (http://www.youtube.com/watch?v=8GEebx72-qs) khám phá câu hỏi này sâu hơn một chút ... –

8

Nó có thể chỉ đơn giản là ánh xạ đối tượng hoặc NPC, đến mặt phẳng tọa độ X, Y, Z. Thông tin đó được lưu trữ với giá rẻ.

Trong khi chơi, tất cả các đối tượng đó vẫn được ánh xạ tới hệ tọa độ mọi lúc. Họ chỉ cần đọc thông tin lưu và bắt đầu từ đó.

+0

+1 vì điểm (tại thời điểm) của bạn là '666'. ;-) Ngoài ra, câu trả lời hay! – dna123

+1

+1 vì điểm (tại thời điểm) của bạn là 723 –

+0

Đối tượng thường có nhiều trạng thái cần được duy trì hơn là vị trí của chúng, mặc dù ... – snemarch

3

Nếu bạn nghĩ về thông tin bạn cần lưu, nó thực sự không nhiều;

Ví dụ:

  • Chức
  • Định hướng
  • Inventory
  • Sức khỏe
  • Objective-bang

Có rất nhiều hơn tất nhiên, nhiều trong số đó dependend trên cả hai loại trò chơi và làm thế nào cấu trúc lưu được tổ chức.

Một số trò chơi như Resident Evil chỉ cho phép lưu khi bạn nhập khu vực mới có nghĩa là bạn không phải lưu trữ tất cả thông tin cho các thực thể trong cả hai khu vực. Khi bạn "tải" một lưu thuộc tính của họ đến từ đĩa.

Để biết dữ liệu này được truy xuất/modofied như thế nào, tôi không hoàn toàn chắc chắn là mình đã hiểu. Nó chỉ là dữ liệu trong bộ nhớ bàn giao tiếp. Khi người chơi lưu nó được ghi vào thiết bị lưu, và khi họ tải nó được khôi phục.

2

Một kỹ thuật chính là tiết kiệm vi sai: chỉ lưu trạng thái là thứ khác với mặc định của nó. So sánh và tương phản "lưu trạng thái và vị trí của mọi đối tượng trong thế giới trò chơi" bằng "lưu trạng thái và vị trí của mọi đối tượng trong thế giới trò chơi mà người chơi đã di chuyển hoặc thay đổi".

8

Tôi nghĩ bạn đang đánh giá quá mức độ phức tạp của những gì đang được lưu trữ/truy xuất. Bạn không cần phải lưu trữ các mô hình 3D cho các đối tượng hoặc kết cấu của chúng hoặc bất kỳ thứ gì tạo nên các phần lớn kích thước của đĩa trên trò chơi.

Trước hết, như sự hỗn loạn được đề cập, chỉ cần lưu trữ thông tin về những thứ đã được di chuyển. Thậm chí sau đó, bạn có thể chỉ cần lưu trữ, cho mỗi người trong số đó, vị trí và định hướng mới (giả sử không có các biến khác có liên quan, như "bị hỏng"). Vì vậy, đó là hai vectơ cho mỗi đối tượng, sẽ có tổng cộng 24 byte cho mỗi đối tượng. Điều đó có nghĩa là bạn có thể lưu trữ thông tin cho 40.000 đối tượng trên mỗi megabyte. Đó là một vật thể khủng khiếp đã di chuyển xung quanh.

Khôi phục dữ liệu này không phức tạp hơn việc đặt các đối tượng ở vị trí đầu tiên. Mỗi đối tượng phải định vị/định hướng mặc định cho trò chơi để đặt nó ở đâu đó, vì vậy tất cả những gì bạn đang làm là thay thế giá trị mặc định bằng giá trị được lưu trong tệp lưu. Điều này không phức tạp và không yêu cầu bất kỳ xử lý bổ sung đáng kể nào.

1

Cho các câu trả lời khác, khoản tiết kiệm lớn nhất đến từ việc loại bỏ tất cả dữ liệu trạng thái không cần thiết.

Nếu bạn nhìn vào trò chơi phụ cuộn 8 bit, chúng sẽ bắt đầu loại bỏ trạng thái ngay khi mọi thứ ở chế độ tắt màn hình và đôi khi không giữ gì cả, vì tài nguyên của chúng quá chặt để giữ nhiều hơn số lần tối thiểu.

Làm điều đó ở cấp độ macro cho trò chơi như Fallout 3 chỉ là vấn đề tăng phạm vi của sự cố. Bạn bắt đầu phân vùng cảnh quan bằng lưới hoặc các phương pháp hình học khác, và các công cụ sinh sản/giải thích khi người chơi di chuyển từ phần này sang phần khác. Bạn lý tưởng giữ kích thước của từng khu vực nhỏ sao cho trạng thái trong bộ nhớ không cao. Bạn tìm ra mức tối thiểu của trạng thái cần thiết để giữ xung quanh các trường hợp NPC và mục và trong dữ liệu bố trí bạn gắn thẻ càng nhiều càng tốt để tự động trả lại để không cần bất kỳ trạng thái nào được lưu.

Nếu bạn muốn được chỉ vào cấu trúc dữ liệu cụ thể, định dạng tuần tự hóa mẫu có thể là một dòng tuyến tính được lập chỉ mục bởi một cây con trỏ, nơi tổ chức của cây tương ứng với bố cục bản đồ.

1

Trên một lưu ý liên quan, công cụ trò chơi thường sử dụng nén Zip, để giữ cho kích thước của tất cả nội dung đó xuống và cũng làm cho một số hoạt động nhanh hơn.

1

Bên cạnh những gì mọi người khác đã nói, tôi muốn thêm trạng thái không cần thiết ngụ ý chỉ vị trí và chuyển động, mà còn thích hợp cho trạng thái tương ứng. Thông thường một Game Engine có tính năng phù thủy cho phép bạn lưu dữ liệu của một lớp nhất định.

Giả sử bạn có một lớp Player và bạn cũng vào những câu chuyện, khi bạn nhấp vào lưu dữ liệu có thể có thể được lưu trữ là:

  • đâu các cầu thủ nằm trong mức/đồ
  • thuộc tính của ông là gì: sức khỏe, mana, sức mạnh, thông minh, vv
  • nào ông có những kỹ năng.
  • Cấp độ của anh ấy là bao nhiêu.

toàn cầu, chúng tôi cũng có thể có:

  • bao nhiêu tài liệu tham khảo (tên cho phép động cơ để đón một đối tượng từ một danh sách) cho các đối tượng đang được lưu trữ trong đó mức độ cụ thể, trong khác từ khi bạn tải những gì các đối tượng cần được nạp cùng với nó.
  • Chúng ta đang sử dụng vật lý, nếu có thì ai sử dụng nó.

Và nhiều hơn thế nữa. Fallout 3 có một loại tiết kiệm, một trò chơi khác sẽ có một loại khác. Nó thực sự phụ thuộc vào thể loại và động cơ được sử dụng.

4

Trong Fallout 3 nói riêng, bản đồ được chia theo kiểu lưới. Bạn chỉ có thể xem hình vuông hiện tại của mình và hình vuông ngay lập tức tiếp theo. Kiểu lưu trữ dữ liệu không thực sự quan trọng - có thể là một cơ sở dữ liệu SQLite, có thể là một cây được tuần tự hóa thành đĩa, hoặc có thể là một cái gì đó hoàn toàn khác.

... bạn bạn sẽ có một mảng khổng lồ của mọi đối tượng trong game , và liên tục cập nhật danh sách nhỏ chứa các đối tượng có thể nhìn thấy render?

Thường có, nhưng "mảng khổng lồ" không cần phải có trong bộ nhớ. Và có nhiều danh sách hơn - đối tượng trong ô vuông hiện tại và liền kề (bạn có thể bị tấn công từ phía sau - không phải trong danh sách hiển thị), danh sách hiển thị, danh sách hẹn giờ ...

Sẽ xảy ra nếu bạn cuối cùng chạm vào mọi đối tượng trong game? Bạn sẽ tiết kiệm được trò chơi ngày càng lớn hơn?

Có thể - nếu có bảng trạng thái mặc định cho mọi thứ, lưu có thể chỉ chứa sự khác biệt. Tiết kiệm sau đó sẽ phát triển khi bạn tiến bộ.

Mọi thứ đều tồn tại khi bạn rời/quay lại một vị trí.

Không. Các đồ vật bạn thả bên ngoài ngôi nhà của bạn cuối cùng sẽ biến mất. Các cơ quan cũng vậy. Quái vật ngẫu nhiên được respawned mỗi một lần trong một thời gian. Đây là cả hai thuận tiện cho các nhà thiết kế trò chơi và phù hợp với thế giới thực.

Các vấn đề liên quan