libgdx チュートリアル
libgdxの使い方
サーチ…
バージョン
インストールまたはセットアップ
LibGDXはシンプルなJavaプログラムの助けを借りてかなり簡単な設定をしています。 ここでダウンロードを見つけることができます。アプリケーションを起動すると、次のようになります。
注:このスクリーンショットは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 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
がありdesktop
。 desktop
、 desktop
プロジェクトの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アプリケーション)。次のウィンドウが表示されます。
Intellij Ideaを使用して実行する
Intellijでは、実行設定を行う必要があります。これを行うには、下のニンジンのように見える右上のボタンをクリックする必要があります:
次に、[Edit Configurations ...]ボタンをクリックします。現在のすべての実行構成の画面が表示されます。そのウィンドウの左上にある「+」をクリックし、「アプリケーション」オプションを選択します。そこから、 "メインクラス"オプションの "DesktopLauncher"ファイルを選択し、 "モジュールのクラスパスを使用する"をコアオプションに設定し、 "作業ディレクトリ"をコアフォルダのassetsフォルダに設定します。最終製品は次のようになります。
完了したら、実行コンフィギュレーションの名前を選択して[適用]をクリックし、次に[OK]をクリックします。それを済ませたら、右上の緑のランアイコンをクリックしてください:
MyGdxGameクラスで何が起こっていますか?
最初にcreate
メソッドが呼び出され、画面に描画されるバッチが初期化されます。次に、badlogic.jpgをメモリにロードします。
この後、アプリケーションが停止するまで、 render
メソッドが繰り返し呼び出されます。このメソッドは、背景色を赤にリセットし、画面に画像を描画します。あなたが見ることができるように、常にバッチ図面を開始して終了する必要があります。最後に、アプリケーションが停止しようとしているときに、 dispose
メソッドが呼び出されると、テクスチャとバッチで使用されるメモリ領域が解放されます。
(アプリケーションがバックグラウンドにあるときにAndroidがメモリ空間を解放する可能性があるため、Androidなどの他のプラットフォームでも実行時にディスポーザルが行われることは知っておくと良いですが、これはより高度なトピックです)
備考:以下のような実行でエラーが発生した場合は、この質問に答えてください!
ファイルが見つかりません:badlogic.jpg(内部)
LibGDXの概要
LibGDXは、Javaで開発された無料のオープンソースのゲーム開発ライブラリです。目標は、ユーザーがデスクトップ、Android、iOS、Webブラウザで動作するクロスプラットフォームのゲームを開発できるようにすることです。コードを一度書いて、それを主要なプラットフォームに展開してください。
プラットフォーム固有コードのサポートの追加
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を参照)
2Dシーングラフ
JavaやAndroidを使い始めるとすぐに、(0,0)が左上隅にあることがわかります。しかし、LibGDXでは、デフォルトで左下隅に(0,0)があります。
正射投影カメラを使用すると、(0、0)を左上隅に表示できます。デフォルトでは、(0、0)は左下隅にあります。これは、XとYの座標を持つテクスチャの角を変更するので、知ることが重要なことです。