Я следил за книгой «Начало разработки игр для Android 4» Марио Зехнер.Портирование входа Android в приложение Java Desktop
Если вы хотите, чтобы увидеть Android Framework, разработанный при чтении книги смотрите здесь:
Теперь, перед погружением далее в книге и начала OPENGL, я решил улучшить свое дно матки Знание Java с помощью пытаясь перенести Framework на Java-версию.
Я думаю, что у вас есть игра, в которой используется Framework, и при копировании этих GameClasses на мою версию Java она просто будет использовать ту же платформу с различными реализациями интерфейсов.
Так, при попытке реализовать верхние интерфейсы в Java я должен был ковылять проблем, таких как - то, что является эквивалентом AssetsManager и т.д.:
Часть решена в книге для Android GameFramework:
________INTERFACE______
public interface FileIO {
// Load assets from apk package
InputStream readAsset(String fileName) throws IOException;
// Load files from storage (SD)
InputStream readFile(String fileName) throws IOException;
OutputStream writeFile(String fileName) throws IOException;
}
_______ANDROID IMPLEMENTATION_______
public class AndroidFileIO implements FileIO {
Context context;
AssetManager assets;
String externalStoragePath;
// Constructor
public AndroidFileIO(Context context) {
this.context = context;
this.assets = context.getAssets();
this.externalStoragePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;
}
@override
public InputStream readAsset(String fileName) throws IOException {
return assets.open(fileName);
}
@override
public InputStream readFile(String fileName) throws IOException {
return new FileInputStream(externalStoragePath + fileName);
}
@override
public OutputStream writeFile(String fileName) throws IOException {
return new FileOutputStream(externalStoragePath + fileName);
}
}
И я, не зная о том, как сделать то же самое в Java, о том, что выше используется AssetsManager также появляется в другой реализации Android Framework.
Я использовал для загрузки файлов в Java, как это:
public void load(String filename){
BufferedReader in = null;
File file1 = new File("/Users/jesjjes/AndroidStudioProjects/MapWindowTest/app/src/main/assets/"+filename+".text");
try {
in = new BufferedReader(new InputStreamReader(new FileInputStream(file1)));
} catch (IOException e) {
// :(It's ok we have defaults
} catch (NumberFormatException e) {
// :/ It's ok, defaults save our day
}
finally {
try {
if (in != null)
in.close();
}
catch (IOException e) {
}
}
}
Как бы вы ее решить? Рамка не слишком сложна, и вы можете получить хорошее предположение, глядя на связанный GitHub Rep.
Мне не нужно точное решение кода, но, возможно, вы можете поделиться некоторыми советами о том, как это сделать.
Должен ли я просто расширить свои интерфейсы? И позже каким-то образом используя верхний интерфейс, который сообщает Game, какой из них используется? Так называемые методы вроде: game.getInput(). GetTouchedX() знают, нужно ли им вызывать Android GameFramework или версию JavaFrameworks x для версии? : P
Заранее спасибо
OK есть одна ошибка во втором конструкторе говоря, что this.externalStoragePath = externalStoragePath нуждается в строку, как определено выше Конструктора. Как должно быть это задание? Я предполагаю, что это ошибка ввода во втором конструкторе, и первый параметр должен быть также типа String? Или я извлечу строку переданного файла? – railwanderer
один последний вопрос, во втором конструкторе вы вызываете super(). Почему это не нужно в первом конструкторе? – railwanderer
Nevermind, второй конструктор вызывается первым. но все же мне интересно, почему вызывается super(). Я разместил ниже изменения во втором конструкторе (путь извлечения String файла) – railwanderer