Có thư mục đặc biệt đa nền tảng nào tôi có thể sử dụng cho các tệp lưu trò chơi không?


7

Tôi đang phát triển với LWJGL và Java trên máy tính xách tay Windows 7. Tôi đã thiết lập thành công lưu vào thư mục %appdata%\gamename\saves\dạng dài hoặc c:\users\user\appdata\roaming\gamename\saves\bằng cách sử dụng File dir = new File(System.getenv("APPDATA") + "\\gamename\\saves\\");.

Tôi có kinh nghiệm ở cấp độ sở thích với Linux và không có kinh nghiệm với OSX. Trò chơi của tôi sẽ hoàn toàn đa nền tảng.

System.getenv("APPDATA");nền tảng chéo? Nếu vậy, nó trỏ đến đâu trên Linux hoặc OSX? Có một thực hành thay thế tốt nhất mà tôi nên sử dụng?

Câu trả lời:


7

Tôi đang sử dụng mã này trên trò chơi của mình ngay bây giờ:

System.getProperty("user.home");

Đơn giản và hiệu quả.

Đó là một thư mục phụ thuộc người dùng, hoàn toàn tốt để lưu trữ các tệp lưu. Tôi đang sử dụng nó để tải xuống và lưu trữ tài sản, mặc dù.


11

Không có thư mục như vậy; %APPDATA%là dành riêng cho Windows. Bạn sẽ phải tự trừu tượng hóa nó: tạo GetSaveGameDirectorychức năng của riêng bạn trả về một đường dẫn phù hợp trên bất kỳ hệ điều hành nào bạn đang chạy. Thông thường, bạn có thể đưa ra quyết định này vào thời gian biên dịch bằng các kiểm tra tiền xử lý đối với các macro phù hợp trong C (và đó là ilk). Tôi không hoàn toàn chắc chắn về cách tốt nhất để làm như vậy trong Java.

Trên Windows, %APPDATA%thư mục con cho công ty hoặc trò chơi của bạn là phù hợp. Trên máy Mac, ~/Library/Application Support/Your Gamephổ biến mặc dù các nguyên tắc của Apple khuyên bạn không nên lưu trữ "dữ liệu người dùng" ở đó (nên vào ~/Documentsthư mục) - điều này phụ thuộc chủ yếu vào việc bạn có nhắc người dùng chọn thư mục hay không.

Trên các hệ thống * nix chung, có lẽ bạn sẽ thấy ít tiêu chuẩn hóa hơn - có lẽ là một thư mục ẩn bên trong ~, chẳng hạn như ~/.yourgame? Chắc chắn đây là thực tế phổ biến cho các tập tin cấu hình. Một người dùng * nix thực tế có thể sẽ cần phải đồng ý xem liệu đây có phải là một vị trí lưu trò chơi thích hợp hay không.

Để có kết quả tốt nhất, đừng mã hóa đường dẫn đến thư mục dựa trên chuỗi tiếng Anh, mà hãy sử dụng API hệ điều hành để truy cập vào thư mục. Điều này sẽ giúp đảm bảo trò chơi của bạn chạy đúng trên phiên bản HĐH không phải tiếng Anh. Ví dụ: trên Windows, sử dụng SHGetKnownFolderPath hoặc trình bao bọc tương đương, nếu có thể.


1
Đáng nói là mới trong phiên bản OS X mới nhất, Apple đã biến thư mục ~ / Library trở nên vô hình, vì vậy hầu hết người dùng sẽ không thể tìm thấy các tệp bên trong đó nữa. Vì vậy, điều quan trọng bây giờ là đặt các tệp lưu bên ngoài hệ thống phân cấp đó!
Trevor Powell

2
Vâng, ~/.gamenamelà hành vi dự kiến ​​(và cách nó luôn được thực hiện, xem Minecraft, Warzone2100 và bất kỳ trò chơi nào khác). Nếu bạn vẫn muốn lưu ở một vị trí khác, bạn có thể tạo một liên kết thông qua thư mục đó. On general *nix systems you'll probably find less standardization... thực sự, tôi cảm thấy hoàn toàn ngược lại (nếu chúng ta nói về Linux, BSD và Unix ... không chắc chắn về MacOS). Ngoại trừ một số trò chơi nguồn đóng khủng khiếp không tôn trọng cấu trúc thư mục, tôi luôn tìm thấy các tệp cấu hình và trò chơi lưu trong đó ~/.name.
Bobby

@Bulk Đối với Mac, dotfiles / dotprinters hoạt động tốt (chúng tôi vẫn có .bash_profile, .emacs.d, .vimrc, v.v.), nhưng nếu bạn đang nhắm mục tiêu cụ thể vào mac, thì vui lòng đưa dữ liệu của bạn vào ~/Library/Application Support/Your Gamenhư Josh đề xuất. Điều này giữ lại toàn bộ khái niệm "sao lưu thư mục nhà của bạn để sao lưu tất cả những gì bạn cần" từ * nix, nhưng không làm lộn xộn ~/với một loạt các dotfiles. Mặc dù ~Librarybây giờ là một thư mục ẩn, nếu người dùng thực sự muốn nhận tiền tiết kiệm, họ có thể mở Terminal. Hoặc bạn có thể có nút "xuất tệp lưu", có vẻ đẹp hơn. Không chắc tôi cảm thấy thế nào Documents.
michael.bartnett

2

Trên Linux, đường dẫn chuẩn duy nhất sẽ là XDG_DATA_HOMEvà các XDG_CONFIG_HOMEthư mục. Sử dụng các biến môi trường với các tên đó nếu chúng tồn tại, nếu không thì mặc định là $HOME/.local/share/<appname>/cho dữ liệu người dùng (lưu, tiến trình, hồ sơ người chơi) và $HOME/.config/<appname>/cho cấu hình. Về mặt lý thuyết, việc xóa thư mục sẽ không ảnh hưởng đến dữ liệu do người dùng cung cấp ngoài việc đặt lại mọi thứ về cài đặt mặc định. Bạn cũng đã có XDG_CACHE_DIR( $HOME/.cache/<appname>) cho các tệp không cần thiết / tạm thời.

Bỏ tất cả mọi thứ vào $HOME/.<appname>chỉ làm lộn xộn thư mục nhà của người dùng và họ có thể không đánh giá cao điều đó. Đó là một thực tế chủ yếu không được chấp nhận với sáng kiến ​​tiêu chuẩn hóa Máy tính để bàn miễn phí mới.


1

Windows :

  • % UserProfile% \ Documents \ Trò chơi đã lưu \ GAMENAME \

Linux :

  • ~ / Trò chơi đã lưu / GAMENAME /

OSX :

  • ~ / Tài liệu / Trò chơi đã lưu / GAMENAME /

Như Josh đã đề cập, không có đường dẫn mã cứng - sử dụng API hệ điều hành để sử dụng đường dẫn chính xác :-)


1
Tôi không phải là con đường mã hóa. Tôi đang thêm "\ gamename \ save \" vào% appdata% trong windows. Tôi thực sự có một vấn đề với việc lưu trữ lưu trong các thư mục tài liệu - mặc dù đó là một việc thường được thực hiện. Lưu không phải là tài liệu, Bạn không thể / không nên chỉnh sửa chúng trong trình xử lý văn bản. Bạn không thể sắp xếp lại chúng mà không phá vỡ các trò chơi / ứng dụng tương ứng. Không có gì nên bỏ bất cứ thứ gì trong một thư mục Tài liệu. Nó làm tôi khó chịu. Họ làm lộn xộn một nơi được tổ chức tốt để lưu trữ các tệp và tài liệu quan trọng liên quan đến doanh nghiệp của tôi. Hết lời. :-p
Suds

1
Xin lỗi để tràn - nhưng trên windows, đó chính xác là thư mục% appdata% dành cho; lưu trữ dữ liệu ứng dụng. Tôi không có đủ kinh nghiệm với các HĐH khác để biết vị trí chính xác với chúng, nhưng chắc chắn có tương đương không?
Suds

2
Tôi không chắc chắn tôi thích ý tưởng tổng hợp thư mục myHome với một thư mục hiển thị khác. Tôi thà đi ~/.gamenamevì đó là hành vi mà tôi mong đợi.
Bobby

Trên Windows, nó cần phải đi đến một thư mục sẽ tồn tại các hồ sơ chuyển hướng và chuyển vùng thư mục.
Maximus Minimus

-4

Tôi nghĩ rằng tốt nhất trong tất cả các nơi để đặt dữ liệu trò chơi sẽ là thư mục cài đặt trò chơi của bạn, IE:

    %Install%/Saves/

Trong đó% install% sẽ giống như C: \ programfiles \ yourgame \ hoặc ~ / apps / yourgame /


3
-1, trên hầu hết các nền tảng, trò chơi sẽ được cài đặt ở nơi người dùng không được phép ghi vào.
Bobby

Trò chơi sẽ có đặc quyền để viết cho nó.
Matt Jensen

3
Không nó sẽ không như vậy. Và ngay cả khi bạn nên ngừng sử dụng HĐH đó, vì các đặc quyền rất thiếu sót.
Bobby

4
Thêm -1 vì nó không mạnh trong môi trường nhiều người dùng. Nếu hai người khác nhau sử dụng cùng một máy tính và muốn chơi trò chơi thì sao? Thực sự, đây là một vấn đề đã được giải quyết trong thế kỷ trước - nó đi vào hồ sơ của người dùng, kết thúc cuộc tranh luận. Đưa ra sự phản đối về điều đó, hoặc các giải pháp thay thế, là một sự lãng phí thời gian và năng lượng.
Maximus Minimus

3
Đó không phải là về lửa, đó là về thực hành tốt nhất. Điều này không hoạt động trên gần như tất cả các nền tảng (hoạt động trên Windows XP mặc định, không chắc chắn về Windows Vista hoặc Windows 7, chắc chắn không hoạt động trên bất kỳ Unix nào miễn là trò chơi không được cài đặt trong Home-Directoy, mà nó không nên ' t được). It works for me, uh, điều đó thật tuyệt, nhưng nó không hoạt động với phần còn lại của thế giới.
Bobby
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.