2016-04-11 2 views
1

Я следил за книгой «Начало разработки игр для Android 4» Марио Зехнер.Портирование входа Android в приложение Java Desktop

Если вы хотите, чтобы увидеть Android Framework, разработанный при чтении книги смотрите здесь:

Android Game 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

Заранее спасибо

ответ

1
public class DesktopFileIO implements FileIO { 

    private final File externalStoragePath; 
    private final File assetPath; 


    // Constructor 
    public DesktopFileIO(String externalStoragePath, String assetPath) { 
    this(new File(externalStoragePath), new File(assetPath)); 
    } 

    // Constructor 
    public DesktopFileIO(File externalStoragePath, File assetPath) { 
    super(); 
    this.externalStoragePath = externalStoragePath; 
    this.assetPath = assetPath; 
    } 

    @override 
    public InputStream readAsset(String fileName) throws IOException { 
    return new FileInputStream(new File(assetPath, fileName)); 
    } 

    @override 
    public InputStream readFile(String fileName) throws IOException { 
    return new FileInputStream(new File(externalStoragePath, fileName)); 
    } 

    @override 
    public OutputStream writeFile(String fileName) throws IOException { 
    return new FileOutputStream(new File(externalStoragePath, fileName)); 
    } 


} 
+0

OK есть одна ошибка во втором конструкторе говоря, что this.externalStoragePath = externalStoragePath нуждается в строку, как определено выше Конструктора. Как должно быть это задание? Я предполагаю, что это ошибка ввода во втором конструкторе, и первый параметр должен быть также типа String? Или я извлечу строку переданного файла? – railwanderer

+0

один последний вопрос, во втором конструкторе вы вызываете super(). Почему это не нужно в первом конструкторе? – railwanderer

+0

Nevermind, второй конструктор вызывается первым. но все же мне интересно, почему вызывается super(). Я разместил ниже изменения во втором конструкторе (путь извлечения String файла) – railwanderer

 Смежные вопросы

  • Нет связанных вопросов^_^