Looking for libgdx Answers? Try Ask4KnowledgeBase
Looking for libgdx Keywords? Try Ask4Keywords

libgdxlibgdxの使い方


バージョン

バージョン発売日
1.9.3 2016年5月16日
1.9.5 2016-12-11

プラットフォーム固有コードのサポートの追加

LibGDXは、同じコードを記述して複数の異なるプラットフォームに展開できるように設計されています。しかし、プラットフォーム固有のコードにアクセスしたい場合があります。インスタンスでは、ゲームでリーダーボードとアチーブメントがある場合は、ローカルに格納するだけでなく、プラットフォーム固有のツール(Google Playゲームなど)を使用することもできます。あるいは、データベースや全く別のものを使いたいと思っています。

この種のコードをコアモジュールに追加することはできません。最初のステップはインターフェースを作成することです。コアモジュールで作成します。この最初のものは、他のインタフェースを管理するためのユーティリティです:

public interface PlatformWrapper{
    //here you can also add other things you need that are platform specific.
    //If you want to create your own file saver for an instance, a JSON based database,
    //achievements, leaderboards, in app purchases and anything else you need platform specific code for.
    SQLWrapper getSQLSaver();//This one will be used in this example
    AchievementWrapper getAchievementHandler();//this line is here as an example
}
 

次に、2番目のインタフェースSQLWrapperを作成する必要があります。このモジュールもコアモジュールに入っています。

public interface SQLWrapper{
    void init(String DATABASE);
    void saveSerializable(int id, Object o);
    Object loadSerializable(int id, Object o);
    void saveString(int id, String s);
    //.... and other methods you need here. This is something that varies
    //with usage. You may not need the serializable methods, but really need a custom method for saving 
    //an entire game world. This part is entirely up to you to find what methods you need
   
    //With these three methods, always assume it is the active database in question. Unless 
    //otherwise specified, it most likely is
    String getActiveDatabase();
    void deleteDatabase();
    void deleteTable(String table);//delete the active table
}
 

今度は、すべてのプロジェクトに入り、PlatformWrapperを実装するクラスを作成し、SQLWrapperを実装するクラスを作成する必要があります。各プロジェクトでは、インスタンス、コンストラクタなどの必要なコードを追加します。

作成したインタフェースをすべてオーバーライドしたら、PlatformWrapperを実装しているクラスにインスタンスがあることを確認します(ゲッターがあることを確認してください)。最後に、メインクラスのコンストラクタを変更します。メインクラスは、ランチャーから参照するクラスです。 ApplicationAdapterを継承したり、ApplicationListenerを実装したり、Gameを拡張したりします。 コンストラクタを編集し、PlatformWrapperを引数として追加します。プラットフォームラッパーの中には、他のすべてのラッパー(SQL、業績、または追加したもの)に加えて、いくつかのユーティリティー(追加した場合)があります。

これで、すべてが正しく設定されていれば、PlatformWrapperを呼び出してクロスプラットフォームのインターフェイスを入手できます。任意のメソッドを呼び出し、(実行されたコードが正しいと仮定すると)どのプラットフォームでも表示されます。プラットフォーム固有のコード

アセット・マネージャー

AssetManagerは、資産の管理に役立つクラスです。

まず、インスタンスを作成する必要があります。

AssetManager am = new AssetManager();
 

これが初期化された後、何かをレンダリングする前に、リソースを取得したい:

am.load("badlogic.jpg", Texture.class);//Texture.class is the class this asset is of. If it is a 
//sound asset, it doesn't go under Texture. if it is a 3D model, it doesn't go under Texture.class
//Which class added depends on the asset you load

//... other loading here ...//

//when finished, call finishLoading:
am.finishLoading();
 

さて、あなたはbadlogic.jpgを取得する気がしbadlogic.jpg

Texture texture = am.get("badlogic.jpg");
//Ready to render! The rendering itself is in the normal way
 

AssetManagerを使用すると、それらを一度AssetManagerのメモリにロードして、何度でもそれらを取得できます。

なぜAssetManagerを使用するのですか? ( wikiから):

AssetManager(コード)は、資産の読み込みと管理を支援します。これは、以下の優れた動作のために、資産をロードするための推奨される方法です。

  • ほとんどのリソースのロードは非同期で行われるため、ロード中にリアクティブな読み込み画面を表示することができます
  • 資産は参照カウントされます。 2つの資産AとBの両方が別の資産Cに依存する場合、CはAとBが処分されるまで処分されません。これは、アセットを複数回ロードすると、実際に共有され、1回だけメモリを占有することを意味します。
  • すべての資産を1つの場所に保存できます。
  • キャッシュのようなものを透過的に実装することができます(下記のFileHandleResolverを参照)

インストールまたはセットアップ

LibGDXはシンプルなJavaプログラムの助けを借りてかなり簡単な設定をしています。 ここでダウンロードを見つけることができます。アプリケーションを起動すると、次のようになります。 LibGDXプロジェクトジェネレータの例
注:このスクリーンショットはLinux上で撮影されており、Windowsのインストールとは異なるパスを示しています。ただし、このセットアップアプリケーションと互換性のある任意のOSでフォームは同じです

入力ボックス

[名前]入力ボックスに、プロジェクトのゲーム名を入力します。 "パッケージ"入力ボックスは、メインクラスのパッケージです。 「ゲームクラス」入力ボックスは、ゲームの実行時に呼び出されるメインクラスです。 [宛先]入力ボックスは、プロジェクトが生成される場所です。 Andriod SDKの入力ボックス。アンドロイドSDKがある場所へのパス。この入力ボックスは完全にオプションです。アプリケーションをAndroidにデプロイしたくない場合は、これを心配する必要はありません。


サブプロジェクト

サブプロジェクトは、展開されるプラットフォームだけです。その部分はかなり自己説明的です。たとえば、HTMLに展開したくない場合は、単にチェックボックスをオフにします。


拡張機能

拡張は公式のLibGDX拡張です。それぞれが何であるかを示す表があります:

内線番号説明
弾丸 Bulletは3D Collision Detectionと剛体ダイナミクスライブラリです。
フリースタイル Freetypeでは、ビットマップフォントを使用する代わりに、.ttfフォントを使用できます
ツール LibGDXツールの出力を実装できます。
コントローラ XBox 360コントローラのようなコントローラを実装できます。
Box2d 2次元ゲーム用の物理ライブラリ。
Box2dlights 物理的なゲームにソフトなダイナミックライトを追加する簡単な方法を提供します。
アシュリー小さなエンティティフレームワーク
人工知能フレームワーク。

サードパーティーエクステンションを追加することはできますが、その詳細や名前はここには表示されません。


上級

[詳細設定]セクションでは、いくつかの設定を行い、EclipseおよびIDEA IDE用の追加プロジェクトファイルを生成できます。

名前の設定説明
MavenミラーのURL Maven Centralを指定されたMaven URLに置き換えます
アイディア Intellij IDEAプロジェクトファイルを生成する
Eclipse Eclipseプロジェクトファイルを生成する
オフラインモードダウンロードの依存関係を強制しない

世代

すべての設定が正しければ、「生成」ボタンを押すことができます。これには数秒かかることがありますが、基本ファイルが生成され、プロジェクトに必要なGradleが生成されます。作業が完了したら、プロジェクトをIDEにインポートしてください。

LibGDXの概要

LibGDXは、Javaで開発された無料のオープンソースのゲーム開発ライブラリです。目標は、ユーザーがデスクトップ、Android、iOS、Webブラウザで動作するクロスプラットフォームのゲームを開発できるようにすることです。コードを一度書いて、それを主要なプラットフォームに展開してください。

LibGDX Hello World

基本

生成されたプロジェクトには、すでに実装されている基本的なHello Worldのようなアプリケーションが含まれています。

主なプロジェクトは、すべてのプラットフォームに依存しないコードを含むコアプロジェクトです。これは必須ですが、あなたの世代設定に基づいて、選択したすべてのプラットフォームに複数のプロジェクトを追加することができます。

core プロジェクトのcom.mygdx.game.MyGdxGame.java を開きます。次のコードが表示されます。

public class MyGdxGame extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;
    
    @Override
    public void create () {
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");
    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(img, 0, 0);
        batch.end();
    }
    
    @Override
    public void dispose () {
        batch.dispose();
        img.dispose();
    }
} 
 

これは主なプロジェクトですが、直接実行することはできません。プラットフォーム固有のLauncherを実行するcom.mygdx.game.desktop.DesktopLauncher.java がありdesktopdesktopdesktop プロジェクトのcom.mygdx.game.desktop.DesktopLauncher.java と呼ばれdesktop

public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        new LwjglApplication(new MyGdxGame(), config);
    }
} 
 

このクラスでは、プラットフォーム固有の設定を行うことができます。


あなたのゲームを実行する

EclipseとIntellijは、プロジェクトを実行するために2つの異なる方法を使用します。下記のIDEを探してください。

Eclipseを使用して実行する

eclipseを使用して、このクラスをJavaアプリケーションとして実行してアプリケーションを実行することができます(プロジェクトを右クリック - >実行 - > Javaアプリケーション)。次のウィンドウが表示されます。

デスクトップでHello Worldを実行する

Intellij Ideaを使用して実行する

Intellijでは、実行設定を行う必要があります。これを行うには、下のニンジンのように見える右上のボタンをクリックする必要があります:

にんじん

次に、[Edit Configurations ...]ボタンをクリックします。現在のすべての実行構成の画面が表示されます。そのウィンドウの左上にある「+」をクリックし、「アプリケーション」オプションを選択します。そこから、 "メインクラス"オプションの "DesktopLauncher"ファイルを選択し、 "モジュールのクラスパスを使用する"をコアオプションに設定し、 "作業ディレクトリ"をコアフォルダのassetsフォルダに設定します。最終製品は次のようになります。

設定例の実行

完了したら、実行コンフィギュレーションの名前を選択して[適用]をクリックし、次に[OK]をクリックします。それを済ませたら、右上の緑のランアイコンをクリックしてください:

実行アイコン

MyGdxGameクラスで何が起こっていますか?

最初にcreate メソッドが呼び出され、画面に描画されるバッチが初期化されます。次に、badlogic.jpgをメモリにロードします。

この後、アプリケーションが停止するまで、 render メソッドが繰り返し呼び出されます。このメソッドは、背景色を赤にリセットし、画面に画像を描画します。あなたが見ることができるように、常にバッチ図面を開始して終了する必要があります。最後に、アプリケーションが停止しようとしているときに、 dispose メソッドが呼び出されると、テクスチャとバッチで使用されるメモリ領域が解放されます。

(アプリケーションがバックグラウンドにあるときにAndroidがメモリ空間を解放する可能性があるため、Androidなどの他のプラットフォームでも実行時にディスポーザルが行われることは知っておくと良いですが、これはより高度なトピックです)



備考:以下のような実行でエラーが発生した場合は、この質問に答えてください!

ファイルが見つかりません:badlogic.jpg(内部)

2Dシーングラフ

JavaやAndroidを使い始めるとすぐに、(0,0)が左上隅にあることがわかります。しかし、LibGDXでは、デフォルトで左下隅に(0,0)があります。

正射投影カメラを使用すると、(0、0)を左上隅に表示できます。デフォルトでは、(0、0)は左下隅にあります。これは、XとYの座標を持つテクスチャの角を変更するので、知ることが重要なことです。