2012-03-06 58 views
10

有沒有人有任何提示在Android上在SQLite中存儲來自libGDX的數據。我非常熟悉Android SDK中使用的技術,但我不知道如何從libGDX調用這些Android數據庫函數。我知道從libGDX調用函數會讓我的遊戲在桌面上無法使用,但是我可以處理它。從Android上的libGDX使用SQLite

回答

12

一種方法總是在您的主項目中創建一個接口,我們將其稱爲NativeFunctions。然後,讓您的桌面和Android應用程序/活動都實現此界面。在創建主項目時,您可以一起傳遞應用程序/活動。在你的主應用程序中,你保留對傳入接口的引用,並用它來調用本地函數,你可以分別爲桌面和Android實現本地函數(不要讓你的遊戲在桌面上無法使用,你也可以在那裏使用SQLite)。

好吧,這很複雜,所以讓我們看看它在行動(定義一個函數來打開一個URL):

接口:

public interface NativeFunctions { 
    public void openURL(String url); 
} 

主類:

public class MyGame extends Game/ApplicationListener { 
    public NativeFunctions mNativeFunctions; 

    public MyGame(NativeFunctions nativeFunctions) { 
     mNativeFunctions = nativeFunctions; 
    } 
    // Exemplary function call, of course this doesn't make sense in render() ;) 
    public void render() { 
     mNativeFunctions.openURL("http://www.example.com"); 
    } 
} 

Android實現:

public class MyGameActivity extends AndroidApplication implements NativeFunctions { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     initialize(new MyGame(this), false); 
    } 
    public void openURL(String url) { 
     Intent viewIntent = new Intent("android.intent.action.VIEW", 
      Uri.parse(url)); 
     startActivity(viewIntent); 
    } 
} 

桌面實現:

public class MyGameDesktop implements NativeFunctions { 
    public static void main(String[] args) { 
     MyGameDesktop game = new MyGameDesktop(); 
     new LwjglApplication(new MyGame(game), "MyGame", 800, 
      480, false); 
    } 
    public void openURL(String url) { 
     // Your implementation to open URL on dekstop 
    } 
} 

就是這樣,你的實現使用SQLite大概應該是沿着同樣的方式。順便說一句。我認爲這也是整合廣告框並與整個系統交流的方式。

+2

太棒了!完美工作!這對許多情況都是很好的知識。謝謝您的幫助。你似乎最近都在回答我所有的問題。 – 2012-03-07 00:25:29

+2

不客氣!實際上,我經常使用LibGDX,因爲stackoverflow已經回答了很多我很高興回饋的問題;)。 – dom 2012-03-07 14:27:41