2016-04-11 18 views
1

Mario Zechner tarafından hazırlanan "Android 4 Oyun Geliştirme Başlangıç" kitabını takip ediyordum. Burada bakmak Kitabı okuyarak geliştirilen Android Framework görmek istiyorsanızAndroid Tablosunu Java Masaüstü Uygulamasına Aktarma

: Daha fazla kitabın dalmadan önce,

Android Game Framework

Şimdi ve OpenGL başlayarak, ben benim Fundal Java Bilgi artırmaya karar Çerçeveyi bir Java Versiyonuna taşımaya çalışmak.

Çerçeveyi kullanan bir Oyun yazmayı düşünüyorum ve bu GameClasses'ı Java Sürümü'ne kopyalarken, aynı Çerçeve'yi Arayüzlerin farklı Uygulamalarıyla birlikte kullanır. java üst arabirimlerini çalışırken

yüzden gibi sorunları da beraberinde rastlamak vardı - bir AssetsManager vb eşdeğer nedir:

Android GameFramework için Kitabında çözüldü Bölüm:

________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); 
    } 


} 

Ve bana yukarıda kullanılan ilişkin, Java aynısını yapmaya nasıl bilmeden AssetsManager ayrıca, Çerçevenin başka bir Android Uygulamasında da görünür.

böyle Java dosyaları yüklemek için kullanılır:

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) { 
    } 
    } 
} 

Bunu nasıl çözecek? Çerçeve çok karmaşık değil, yukarıdaki bağlantılı GitHub Temsilcisine bakarak iyi bir tahminde bulunabilirsiniz.

Tam olarak Kod Çözümü'ne ihtiyacım yok, ancak bunun nasıl gerçekleştirileceğiyle ilgili bazı ipuçlarını paylaşabilirsiniz.

Arabirimlerimi genişletmeliyim mi? Ve daha sonra bir şekilde hangi oyunu kullandığını söyleyen bir Üst Arayüz kullanılıyor? Yani böyle adlandırılan Yöntemler: game.getInput(). GetTouchedX() Android GameFramework veya JavaFrameworks girdi x sürümü çağırmak gerekirse biliyor musun? : P Oluşturucu yukarıda tanımlandığı gibi this.externalStoragePath = externalStoragePath, bir String ihtiyacı olduğunu söyleyerek ikinci yapıcı bir hata

cevap

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

Tamam önceden

Teşekkür yoktur. Bu ödev nasıl olmalı? Sanırım ikinci kurucudaki yazım hatası ve ilk parametre de String tipinde olmalı? Yoksa geçirilen dosyanın dizesini ayıklayayım mı? – railwanderer

+0

son bir soru, ikinci kurucuda super() diyoruz. İlk Constructer'da buna neden gerek yok? – railwanderer

+0

Nevermind, ikinci kurucu ilk tarafından çağrılır. ama yine de neden super() çağrıldığını merak ediyorum. İkinci Oluşturucu'daki değişikliklerin (dosya dizgisi dizgisi) – railwanderer

İlgili konular