ゲームのセーブファイルに使用できるクロスプラットフォームの特別なディレクトリはありますか?


7

Windows 7ラップトップでLWJGLとJavaを使用して開発しています。を使用して、%appdata%\gamename\saves\またはロングフォームc:\users\user\appdata\roaming\gamename\saves\フォルダへの保存を正常に設定しましたFile dir = new File(System.getenv("APPDATA") + "\\gamename\\saves\\");

私はLinuxの趣味レベルの経験があり、OSXの経験はありません。私のゲームは完全にクロスプラットフォームになります。

あるSystem.getenv("APPDATA");クロスプラットフォームは?もしそうなら、それはLinuxまたはOSXのどこを指しますか?使用すべきベストプラクティスの代替策はありますか?

回答:


7

私は今このゲームでこのコードを使用しています:

System.getProperty("user.home");

シンプルで効率的。

これはユーザーに依存するディレクトリであり、保存ファイルを保存するのに最適です。ただし、アセットのダウンロードと保存に使用しています。


11

そのようなディレクトリはありません。%APPDATA%Windows固有です。自分で抽象化する必要がありGetSaveGameDirectoryます。実行しているオペレーティングシステムの適切なパスを返す独自の関数を作成します。通常、この決定はコンパイル時にCの適切なマクロ(そしてそれはilk)に対するプリプロセッサチェックで行うことができます。Javaでこれを行うための最良の方法については、完全にはわかりません。

Windowsでは、%APPDATA%会社またはゲームのサブディレクトリが適切です。Macでは~/Library/Application Support/Your Game一般的ですが、Appleのガイドラインでは「ユーザーデータ」をそこに保存しないことをお勧めしています(~/Documentsディレクトリに移動する必要があります)。これは、主にユーザーにディレクトリを選択するように求めるかどうかによって異なります)。

内、おそらく隠されたディレクトリ-一般的な* nixのシステムでは、おそらくあまり標準化を見つける~など、~/.yourgame?確かに、これは構成ファイルの一般的な方法です。実際の* nixユーザーは、これが適切なゲームの保存場所であるかどうかを確認する必要があるでしょう。

最良の結果を得るには、英語の文字列に基づいてディレクトリへのパスをハードコーディングしないでください。ただし、OS APIを使用してディレクトリにアクセスしてください。これにより、英語以外のバージョンのOSでゲームを適切に実行できます。たとえば、Windowsでは、可能であればSHGetKnownFolderPathまたは同等のラッパーを使用します。


1
OS Xの最新バージョンの新機能であるAppleは、〜/ Libraryディレクトリを非表示にしたため、ほとんどのユーザーはそこにあるファイルを見つけることができなくなります。したがって、保存ファイルをその階層の外に置くことは二重に重要です!
Trevor Powell

2
はい、~/.gamename予想される動作です(そして、常にそれがどのように行われるかについては、Minecraft、Warzone2100、およびその他のゲームを参照してください)。それでも別の場所に保存したい場合は、そのディレクトリを介してリンクを作成できます。On general *nix systems you'll probably find less standardization...実際、私は正反対を感じます(Linux、BSD、Unixについて話す場合... MacOSについてはわかりません)。ディレクトリ構造を尊重しないいくつかのひどく閉じたソースのゲームを除いて、私は常に設定ファイルとゲームの保存をで見つけます~/.name
Bobby

@Bobby Macの場合、dotfiles / dotfoldersは問題なく動作しますが(.bash_profile、.emacs.d、.vimrcなどがあります)、特にMacをターゲットにしている場合は~/Library/Application Support/Your Game、Joshが提案するようにデータを入力してください。これにより、* nixの「必要なものすべてをバックアップするためにホームフォルダーをバックアップする」という概念全体が維持さ~/れますが、多数のドットファイルが散らかることはありません。一方で~Library、今隠しフォルダであるユーザーは本当に自分のセーブで取得したい場合、彼らは、ターミナルを開くことができます。または、「保存ファイルのエクスポート」ボタンを使用することもできます。どう思うかわからないDocuments
michael.bartnett 2012

2

Linuxでは、唯一の標準化されたパスはXDG_DATA_HOMEXDG_CONFIG_HOMEディレクトリになります。それらが存在する場合は、それらの名前の環境変数を使用します。それ以外の場合は、デフォルト$HOME/.local/share/<appname>/でユーザーデータ(保存、進行状況、プレーヤーのプロファイル)と$HOME/.config/<appname>/構成に使用します。後者のディレクトリを削除しても、理論的には、すべてをデフォルト設定にリセットする以外に、ユーザーが提供したデータには影響しません。また、必須ではない/一時的なファイルのXDG_CACHE_DIR$HOME/.cache/<appname>)もあります。

すべてをダンプすると$HOME/.<appname>、ユーザーのホームフォルダーが乱雑になり、ユーザーはそれを正しく認識しない可能性があります。これは、新しいFree Desktop標準化イニシアチブでほとんど非推奨の慣行です。


1

  • %UserProfile%\ Documents \ Saved Games \ GAMENAME \

Linux

  • 〜/保存済みゲーム/ GAMENAME /

OSX

  • 〜/ドキュメント/保存されたゲーム/ゲーム名/

Joshが述べたように、パスをハードコーディングしないでください-OS APIを使用して正しいパスを使用してください:-)


1
パスをハードコーディングしていません。Windowsの%appdata%に「\ gamename \ saves \」を追加しています。保存をドキュメントフォルダーに保存することに問題があります。保存はドキュメントではありません。ワープロで編集することはできません。それぞれのゲーム/アプリを壊さずにそれらを再編成することはできません。Documentsフォルダーに何もダンプしてはなりません。それは私の地獄を悩ませます。彼らは、私のビジネスに関連する重要なファイルやドキュメントを保存するために、他の点ではよく整理された場所を散らかしています。エンドラント。:-P

1
オーバーフローして申し訳ありません-しかし、Windowsでは、%appdata%フォルダーはまさにそのためのものです。アプリケーションデータの保存。他のOSで正しい場所を知るのに十分な経験はありませんが、同等のものは確かにありますか?
2012年

2
myHome-Folderをさらに別の表示フォルダーでプールするアイデアが好きかどうかはわかりません。それは~/.gamename私が期待する振る舞いだからです。
Bobby

Windowsでは、フォルダーリダイレクトとローミングプロファイルを通過するフォルダーに移動する必要があります。
Maximus Minimus 2012年

-4

ゲームデータを配置するのに最適な場所は、ゲームのインストールフォルダーであるIEです。

    %Install%/Saves/

%install%はC:\ programfiles \ yourgame \または〜/ apps / yourgame /のようになります。


3
-1、ほとんどのプラットフォームでは、ゲームはユーザーが書き込みを許可されていない場所にインストールされます。
ボビー

ゲームにはそれに書き込む特権があります。
Matt Jensen

3
いいえ、それはしません。また、そのOSの使用を中止する必要がある場合でも、特権にひどい欠陥があるためです。
ボビー

4
マルチユーザー環境では堅牢ではないため、追加の-1。2人の異なるユーザーが同じコンピュータを使用していて、ゲームをプレイしたい場合はどうなりますか?本当に、これは前世紀に解決された問題です-それはユーザーのプロファイル、議論の終わりに行きます。それに対する異議を唱えること、または代替ソリューションは、時間とエネルギーの浪費です。
Maximus Minimus 2012年

3
炎の問題ではなく、ベストプラクティスの問題です。これはほとんどすべてのプラットフォームでは機能しません(デフォルトのWindows XPで機能しますが、Windows VistaまたはWindows 7については不明ですが、ゲームがHome-Directoyにインストールされていない限り、Unixでは機能しません。 t be)。It works for meええと、それは素晴らしいことですが、それ以外の世界では機能しません。
Bobby
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.