Existe um diretório especial de plataforma cruzada que eu possa usar para salvar arquivos de jogos?

7

Estou desenvolvendo com LWJGL e Java em um laptop com Windows 7. Configurei com êxito o salvamento na pasta de %appdata%\gamename\saves\formulário longo ou c:\users\user\appdata\roaming\gamename\saves\usando File dir = new File(System.getenv("APPDATA") + "\\gamename\\saves\\");.

Tenho experiência de nível hobby com Linux e experiência zero com OSX. Meu jogo será totalmente multiplataforma.

É System.getenv("APPDATA");multiplataforma? Em caso afirmativo, para onde ele aponta no Linux ou OSX? Existe uma alternativa de melhores práticas que eu devo usar?

Suds
fonte

Respostas:

7

Estou usando este código no meu jogo agora:

System.getProperty("user.home");

Simples e eficiente.

É um diretório dependente do usuário, perfeitamente adequado para armazenar arquivos salvos. Estou usando para baixar e armazenar ativos, no entanto.

Klems
fonte
11

Não existe esse diretório; %APPDATA%é específico do Windows. Você terá que abstrair você mesmo: crie sua própria GetSaveGameDirectoryfunção que retorne um caminho apropriado para qualquer sistema operacional em que você esteja executando. Normalmente, você pode fazer essa determinação em tempo de compilação com verificações de pré-processador em relação às macros apropriadas em C (e é legal). Não tenho muita certeza da melhor maneira de fazer isso em Java.

No Windows, um %APPDATA%subdiretório para sua empresa ou jogo é apropriado. No Mac, ~/Library/Application Support/Your Gameé comum, embora as diretrizes da Apple não recomendem o armazenamento de "dados do usuário" (deve ir para o ~/Documentsdiretório) - depende principalmente se você solicita ou não ao usuário que selecione um diretório).

Em sistemas * nix gerais, você provavelmente encontrará menos padronização - talvez um diretório oculto ~, como ~/.yourgame? Certamente, essa é a prática comum para arquivos de configuração. Um usuário * nix real provavelmente precisará comentar se esse é um local apropriado para salvar o jogo.

Para obter melhores resultados, não codifique o caminho para o diretório com base na cadeia de caracteres em inglês, mas use a API do SO para acessar o diretório. Isso ajudará a garantir que seu jogo seja executado corretamente na versão não inglesa do sistema operacional. Por exemplo, no Windows, use SHGetKnownFolderPath ou um wrapper equivalente, se possível.


fonte
11
Vale mencionar que, na versão mais recente do OS X, a Apple tornou o diretório ~ / Library invisível, para que a maioria dos usuários não possa mais encontrar arquivos lá dentro. Portanto, agora é duplamente importante colocar os arquivos salvos fora dessa hierarquia!
Trevor Powell
2
Sim, ~/.gamenameé o comportamento esperado (e como sempre é feito, consulte Minecraft, Warzone2100 e qualquer outro jogo). Se você ainda deseja salvar em outro local, pode criar um link através desse diretório. On general *nix systems you'll probably find less standardization... na verdade, sinto exatamente o oposto (se falarmos de Linux, BSD e Unix ... não tenho certeza sobre o MacOS). Exceto por alguns jogos de código-fonte horrível que não respeitam a estrutura de diretórios, sempre encontro meus arquivos de configuração e jogos salvos ~/.name.
Bobby
@Bobby Para Mac, dotfiles / dotfolders funcionam bem (ainda temos .bash_profile, .emacs.d, .vimrc, etc.), mas se você estiver direcionando especificamente para mac, coloque seus dados ~/Library/Application Support/Your Gamecomo Josh sugeriu. Isso mantém todo o conceito de "backup da sua pasta pessoal para fazer backup de tudo o que você precisa" do * nix, mas não se ~/confunde com muitos pacotes de arquivos de ponto. Embora agora ~Libraryseja uma pasta oculta, se os usuários realmente querem economizar, eles podem abrir o Terminal. Ou você pode ter um botão "exportar salvar arquivo", que parece melhor. Não sei como me sinto Documents.
michael.bartnett
2

No Linux, o único caminho padronizado seria os diretórios XDG_DATA_HOMEe XDG_CONFIG_HOME. Use as variáveis ​​ambientais com esses nomes, se elas existirem, caso contrário, $HOME/.local/share/<appname>/serão padrão para dados do usuário (salvamentos, progresso, perfil do jogador) e $HOME/.config/<appname>/para configuração. A exclusão do último diretório, em teoria, não deve afetar os dados fornecidos pelo usuário, exceto a redefinição de tudo para as configurações padrão. Você também tem XDG_CACHE_DIR( $HOME/.cache/<appname>) arquivos não essenciais / temporários.

Despejar tudo $HOME/.<appname>apenas desorganiza a pasta pessoal do usuário e eles podem não gostar disso. É uma prática praticamente obsoleta com a nova iniciativa de padronização do Free Desktop.

Aeyoun
fonte
1

Windows :

  • % UserProfile% \ Documents \ Jogos salvos \ GAMENAME \

Linux :

  • ~ / Jogos salvos / GAMENAME /

OSX :

  • ~ / Documentos / Jogos salvos / GAMENAME /

Como Josh mencionou, não codifique os caminhos - use a API do SO para usar o caminho correto :-)

BrandFeelsGood
fonte
11
Eu não sou codificação de caminhos. Estou anexando "\ gamename \ saves \" a% appdata% no Windows. Na verdade, tenho um problema ao armazenar salvamentos em pastas de documentos - mesmo que isso seja algo comum. Salva não são documentos. Você não pode / não deve editá-los no processador de texto. Você não pode reorganizá-los sem quebrar seus respectivos jogos / aplicativos. Nada deve despejar nada em uma pasta Documentos. Isso me irrita muito. Eles ocupam um local bem organizado para armazenar arquivos e documentos importantes relacionados aos meus negócios. Fim discurso retórico. :-p
Suds
11
Desculpe transbordar - mas, no Windows, é exatamente para isso que serve a pasta% appdata%; armazenando dados do aplicativo. Não tenho experiência suficiente com outros sistemas operacionais para saber os locais corretos com eles, mas certamente há um equivalente?
Suds
2
Não sei se gosto da ideia de juntar minha pasta-casa com outra pasta visível. Prefiro ir ~/.gamename, porque esse é o comportamento que eu esperaria.
Bobby
No Windows, ele precisa ir para uma pasta que sobreviverá aos perfis de redirecionamento e roaming de pasta.
Maximus Minimus
-4

Eu acho que o melhor de todos os lugares para colocar dados do jogo seria a pasta de instalação do seu jogo, IE:

    %Install%/Saves/

Onde% install% seria algo como C: \ programfiles \ yourgame \ ou ~ / apps / yourgame /

Matt Jensen
fonte
3
-1, na maioria das plataformas em que o jogo seria instalado em um local para o qual o usuário não tem permissão para gravar.
Bobby
O jogo terá privilégios para escrever nele.
Matt Jensen
3
Não, não vai. E mesmo se você parar de usar esse sistema operacional, porque os privilégios são terrivelmente falhos.
Bobby
4
-1 adicional porque não é robusto em ambientes multiusuários. E se duas pessoas diferentes usarem o mesmo computador e quiserem jogar? Realmente, esse é um problema que foi resolvido no século anterior - ele entra no perfil do usuário, no final da discussão. Levantar objeções a isso, ou soluções alternativas, é um desperdício de tempo e energia.
Maximus Minimus
3
Não se trata de chamas, é de boas práticas. Isso não funciona em quase todas as plataformas (funciona no Windows XP padrão, não tem certeza sobre o Windows Vista ou o Windows 7, certamente não funciona em nenhum Unix, desde que o jogo não esteja instalado no Home-Directoy, o que não deveria ' ser). It works for meIsso é ótimo, mas não funciona para o resto do mundo.
Bobby