2014年9月18日木曜日

libGDXで回転するジェット機2

今回のサンプルは、「LibGDX Tutorial 3B: Basic graphics2 / Simple Animation」、
ジェット機が回転するアニメーションをする。
見た目は前回とほとんど変わらないが、プログラムの中身はずいぶん違う。

1.雛形は前回のを利用


今回は雛形は作らずに前回のを利用する。


2.Animationクラスを利用する


Game class の修正。
BasicsGraphics-core の MyGdxGame.java を修正。



実行してみる。(※ステップ1)


前回と同様、ジェット機がくるくる回転している。
画像が小さくなったような気がするが、見た目はほぼ同じ。

3. 今回の重要なポイント


前回はタイマーを用いて自分で画像を更新することにより
アニメーションを実現していた。
が、今回はAnimationというlibGDXのクラスを使うことで
タイマーの処理を実装する必要がない。

animation = new Animation(1/15f, textureAtlas.getRegions());

When creating an animation you pass in the amount of time per frame
アニメーションを作成する際には、フレームあたりの時間を渡す

(15 frames per second in this case)
(この場合、毎秒15フレーム)

and an array of TextureRegions.
それとTextureRegionsの配列。

These represent the individual frames of animation within the TextureAtlas.
これらはTextureAtlas内アニメーションの各フレームを表す。

In this particular example we are simply using all of the frames available within the Atlas as a single animation.
この特定の例では、単に一つのアニメーションとしてアトラス内で使用可能なすべてのフレームを使用しています。

The next key change is:
次のキー変更がある

elapsedTime += Gdx.graphics.getDeltaTime();
batch.draw(animation.getKeyFrame(elapsedTime, true), 0, 0);

Here we are simply drawing the current frame from the animation to the screen.
ここでは、単に画面に​​アニメーションから、現在のフレームを集めている。

We pass in the amount of time that has elapsed so the animation knows where it is in the sequence.
私たちは、それが配列である場合、アニメーションが知っているように経過した時間の長さを渡します。

The true parameter is telling it to loop the animation.
真のパラメータは、ループにアニメーションを、それを語っている。

Of course, you can have multiple animations from a single texture Atlas.
もちろん、単一のテクスチャアトラスから複数のアニメーションを持つことができます。

Consider the spritesheet we are currently working with.
私たちは、現在作業しているspritesheetを考えてみましょう。

If you take a look at the .atlas file, you will see each individual frame is named:
あなたは.atlasファイルを見てみる場合は、各個別のフレームの名前は表示されます。


4.ステップ2



What we want to do is treat this as two sepeate animations.  Frames 1 through 10 represent an upward roll, while 11-20 are a downward roll.  Let’s take a look at how we do that:
私たちがやりたいことは2 sepeateアニメーションとして扱いです。 11-20が下方にロールしている間のフレーム1〜10は、上方向にロールを表します。それでは私たちはそれを行う方法を見てみましょう:

Game class の修正。
BasicsGraphics-core の MyGdxGame.java を修正。



実行してみる。(※ステップ2)

背面にあるウインドウがステップ1の実行結果で
前面にあるウインドウがステップ2の実行結果です。


以上、終わり。

2014年9月1日月曜日

libGDXで回転するジェット機

今回のサンプルは、「LibGDX Tutorial 3: Basic graphics」、
ジェット機が回転するアニメーションをする。

1.gdx-setupで雛形を作成


ターミナルを開き、gdx-setup.jarがあるフォルダに移動する。
$ cd ~/libGDXProject

gdx-setupを起動する。
$ java -jar gdx-setup.jar

liggdx Project Generator が起動される


必要な情報を入力。()内は説明。
Name: BasicGraphics(プロジェクト名)
Package: name.taoka.ugeee.basicgraphics(パッケージ名)
Game class: MyGdxGame(ゲームクラスの名前)
Destination: /home/taoka/libGDXProject/BasicGraphics(プロジェクトを生成するフォルダ名)
Android SDK: /usr/local/android-studio/sdk(Android SDKのパス。自動でセットされているハズ)

Sub Projects: Desctop と Android を選択。
※Iosは持ってない、HtmlはGWTのプラグインがなくて動かなかったので外した。

Extentions: Box2dが最初からチェックされていたのでそのままにした。

全部入力したら、「Generate」ボタンをクリック。
何やらエラーが出た。
You have a more recent version of android build tools than the recommended.
Do you wat to use this version?


前回」も出たので、そのまま「はい」をクリック。

雛形が生成される。
ゴニョゴニョといっぱいメッセージが出てくる。
「Done!」と表示されれば成功。


もう用がないので、「liggdx Project Generator」は終了させる。

2.Eclipseに取り込む


Eclipseを起動し、
File > Import... > Gradle Project を選択し「Next >」をクリック。


Root folder に、「/home/taoka/libGDXProject/BasicGraphics」
(liggdx Project Generator で指定した Destination)を入力し、
「Build model」をクリック。


しばらく待つと以下のようにプロジェクトが表示される。


プロジェクト(BasicGraphics)をチェックし、「Finish」をクリック。


しばらく待つ。
Package Explorerにプロジェクトが追加追加されている。



3.動作確認


動かしてみる。
プロジェクト「BasickGraphics-desktop」右クリックし、
Run AS > Java Application を選択。


Select Java Application というダイアログが出て何やら聞いてくるので、
「DesktopLauncher」を選択し「OK」をクリック。


動いた!(それにしても度きつい赤だなー)


Androidで動かしてみる。

プロジェクト「BasickGraphics-android」右クリックし、
Run AS > Android Application を選択。


インストールするデバイスを選び、「OK」をクリック。


しばらくするとAndroid端末で以下のような画面がでるハズ。


4.ジェット機の画像を表示


まず、ジェット機の画像ををダウンロードし、Eclipseのプロジェクトにコピー。
これは、「本家」からダウンロードしてください。


android/desktopともassetsの下にコピー。


Game class の修正。
BasicsGraphics-core の MyGdxGame.java を修正。


実行してみる。

引用
コー​​ドについては、実際には前のチュートリアルでのHello Worldの例と比較して新しいことありません。唯一の新しい概念は、テクスチャとスプライトです。テクスチャは、基礎となるOpenGLのテクスチャを表す。テクスチャ(および他の類似のクラス)で心に留めておくべき重要な点は、彼らが使い捨てインターフェイスを実装している。これは、あなたがそれを使い終わったら、disposeメソッドを呼び出す必要があり、そうしないとメモリリークが発生することを意味します!

5.Pixmapを使用して動的に画像を表示


Game class の修正。
BasicsGraphics-core の MyGdxGame.java を修正。


実行してみる。

6.TextureAtlas


いろんな角度からみたジェット機の画像を用意。
本家に見当たらなかったので、
本家の画像より切り抜いたものを置いておく。
jet-images.zip (20画像)


ジェット機の画像を適当なフォルダに解凍。
(ここでは、「~/libGDXProject/BasicGraphics/images」に解凍した)

libGDXのあるフォルダに移動し、以下を実行
$ java -cp gdx.jar:extensions/gdx-tools/gdx-tools.jar com.badlogic.gdx.tools.texturepacker.TexturePacker ~/libGDXProject/BasicGraphics/images/ ~/libGDXProject/BasicGraphics/images/ spritesheet
※Windowsで実行する場合は、gdx.jarとextensions の間の赤い「:」(コロン)は「;」(セミコロン)にする。
※Setup App だけをダウンロードして Automatically でセットアップした場合は、別途ここよりzipをダウンロードして解凍しておく。

TexturePackerの説明
機能: 複数の画像を1つのファイルにパッケージする
第1パラメータ: 画像ファイルのあるディレクトリ
第2パラメータ: 生成先のディレクトリ
第3パラメータ: パッケージファイル名


すると、「spritesheet.atlas」と「spritesheet.png」というファイルが作成される。

プロジェクトにコピー
「spritesheet.atlas」と「spritesheet.png」をassetsフォルダにコピーする。


BasicsGraphics-core の MyGdxGame.java を修正。


実行してみる。


以上、終わり。