Intereting Posts
Google Play Services делает apk слишком большим Android 7 Native Crash: libc.so tgkill Вызовите WebView # getDrawingCache () асинхронно без замораживания потока пользовательского интерфейса Android Studio 1.0 и ошибка «Библиотечные проекты не могут установить applicationId» Как изменить цвет окружения ProgressDialog по умолчанию в android Могу ли я управлять настройкой <support-screen> файла AndroidManifest.xml из файла config.xml в Кордове? Как предотвратить вытеснение другого представления из экрана Как использовать API смарт-блокировки в моем приложении для разблокировки режима разбивки? Как настроить Google Cloud Messaging для Android? Android Google Maps V2 меняет значок моего местоположения Выберите «Android XX» или «API Google» в новом проекте Какие папки макета необходимы для поддержки всех Android-устройств? Получить новое положение координаты после вращения с помощью матрицы Вставка нескольких строк с помощью ContentProvider Android-хост и скрытые устройства Android

Управление ресурсами между версией рабочего стола и устройства в libgdx

Я создаю небольшую игру для Android, используя libgdx. На данный момент у меня есть копия активов игры в папке рабочего стола и в папке проекта Android. По какой-то странной причине мне приходится обращаться к этим файлам по-разному в каждой из двух версий.

Это прекрасно работает в настольном приложении, но дает мне исключение FileNotFound в приложении для Android:

Texture texture = new Texture(Gdx.files.internal("assets/someImage.png")); 

Если я удалю «активы» из имени файла, это будет наоборот (Android работает, сбои на рабочем столе):

 Texture texture = new Texture(Gdx.files.internal("someImage.png")); 

Я не уверен, в чем проблема. Структура папок одинакова для обоих проектов … Каков правильный путь к этому с libgdx?

Solutions Collecting From Web of "Управление ресурсами между версией рабочего стола и устройства в libgdx"

Вы должны хранить все свои активы в папке активов Android и связывать свой рабочий проект с этой папкой. Это краткое описание этого на http://www.badlogicgames.com/wordpress/?p=1537

EDIT: официальное руководство по настройке проекта описывает, как это сделать. Он находится по адресу http://code.google.com/p/libgdx/wiki/ProjectSetup#Asset_folder_setup.

Помимо настройки проекта, я считаю, что ваш второй метод – это правильный способ ссылки на активы обоих проектов. После того, как вы исправите свою настройку, она будет работать должным образом в обеих средах.

Папка « build.gradle » для рабочего проекта также может быть выбрана с помощью Gradle – добавьте эту строку в build.gradle в папку desktop :

 sourceSets.main.resources.srcDirs = [ "../android/assets/" ] 

Или, если вы не создали проект Android:

 sourceSets.main.resources.srcDirs = [ "../core/assets/" ] 

Это должно правильно связать папку в Eclipse и IntelliJ при запуске задач eclipse / idea Gradle. По сравнению с созданием ссылок или вручную добавлением папки в исходный код, я думаю, что это самый простой способ настройки и управления.

После большого количества экспериментов я обнаружил способ заставить это работать:

Для модуля android, Gdx.files.internal внедряется в папку ресурсов Android. Для настольного модуля Gdx.files.internal коренится в папке проекта верхнего уровня.

Поэтому, если вы помещаете символическую ссылку из файлов или каталогов в свою папку ресурсов Android, находящуюся прямо под вашей папкой проекта верхнего уровня (то есть параллельно с сайтами android, core, desktop и т. Д.), То Gdx.files.internal будет работать как для ,

 % cd project % ln -s android/assets/sound sound % ln -s android/assets/images images 

Бонусный наконечник – если вы используете окна, вы можете использовать команду mklink в командной строке cmd для их создания:

 mklink /d sound d:\project\android\assets\sound mklink /d images d:\project\android\assets\images 

(Обратите внимание, что окна can not обрабатывают относительные пути в символических ссылках, также вы должны запускать cmd как администратор)

Убедитесь, что вы синхронизируете свои файлы, если вы это делаете и при работе.

LibGDX Wiki extract:

Настройка папки активов
Проект Android имеет подпапку с именем assets , которая была создана автоматически. Здесь должны быть размещены файлы, доступные для приложения Android. Это проблематично, потому что эти же файлы должны быть доступны для настольного приложения. Вместо того, чтобы хранить две копии всех файлов, проект рабочего стола можно настроить для поиска активов в проекте Android:

Перейдите на вкладку « Source », нажмите « Link Source , « Browse , выберите папку «активы» в своем проекте Android и нажмите « ОК» .
Укажите «активы» для имени папки и нажмите « Готово», затем « ОК» .

Примечание. Если ваши настольные и Android-проекты находятся в одной родительской папке, вы можете использовать «PARENT-1-PROJECT_LOC / gamename-android / assets» для расположения папки связанных активов, где «gamename-android» – это имя Ваш проект Android. Это лучше, чем жестко закодированный путь, если вы планируете делиться своими проектами с другими.

Проверьте, находятся ли все ваши файлы в нижнем регистре в папке ресурсов Android.

Ссылка на папку ресурсов Android не очень хорошая идея, потому что:

1) Eclipse, скорее всего, скопирует вашу папку с указанными ресурсами в apk проекта Android, дублируя размер 2) пути должны быть агностиками платформы. Как я вижу, это проблема с реализацией JogFiles.

Вы лучше скопируете следующий класс в classpath:


package com.badlogic.gdx.backends.jogl; /******************************************************************************* * Copyright 2011 See AUTHORS file. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.badlogic.gdx.backends.jogl; import java.io.File; import com.badlogic.gdx.Files; import com.badlogic.gdx.files.FileHandle; /** * Gdx class overrided in order to keep internal files paths platform independent. * Android search at "assets/" folder. And so we do here for jogl. */ final class JoglFiles implements Files { private static final String ASSETS_FOLDER = "assets"; private final String externalPath = System.getProperty("user.home") + "/"; @Override public FileHandle getFileHandle (String fileName, FileType type) { return new JoglFileHandle(fileName, type); } @Override public FileHandle classpath (String path) { return new JoglFileHandle(path, FileType.Classpath); } @Override public FileHandle internal (String path) { // append "asset/" prefix to those urls who did not already have it. if (!path.startsWith(ASSETS_FOLDER)) { path = ASSETS_FOLDER + File.separator + path; } return new JoglFileHandle(path, FileType.Internal); } @Override public FileHandle external (String path) { return new JoglFileHandle(path, FileType.External); } @Override public FileHandle absolute (String path) { return new JoglFileHandle(path, FileType.Absolute); } @Override public String getExternalStoragePath () { return externalPath; } @Override public boolean isExternalStorageAvailable () { return true; } }