2014年10月21日
2014/10/21 LibGDX アプリ作成1 スプラッシュの表示
LibGDXで生成したプロジェクトをGradleグレイドルを利用して、Eclipseのプロジェクトに入れるところまでは問題ないですか?分からない方は「2014/09/24 LibGDX 開発環境のインストール」
この辺りから順に見直してみてください。
カテゴリ追加すればいいのか?www
ということで、カテゴリにLibGDX1.3.1を追加しておきます。
Gradleで作成したプロジェクトは、以下のようになります。
「プロジェクト名」-android
「プロジェクト名」-core
「プロジェクト名」-desktop
とりあえず、Androidは必要ないのですが。。。
Android、Windows、iOSアプリの共通開発は、coreを修正します。
それぞれの個別開発(というよりは、起動時の画面サイズなどの変更程度)はandroid、desktop等を修正します。
今回は、スプラッシュ画面ということで、desktopの呼出し部分の修正と、coreで「TweenEngine」を使用してのアニメーションさせます。
1.スプラッシュ画面呼出し
desktop内のDesktopLauncher を下記のように修正します。
①で呼出し先のクラスを指定しています。
2.起動準備
Gameクラスを継承したクラスが呼び出されます。Gameクラスのライフサイクルは「ここ」を参考にしてください。
概念的に、Gameクラスを継承したこのクラス(今回はMyGdxGameButton )をベースにしてスクリーンを張り替えるイメージのようです。
①でスプラッシュ用スクリーンを生成してそのスクリーンを表に表示します。
ここで、見てわかるのは、ほぼスッカラカンのクラスです。そしてすべてオーバーライドしたクラスを呼び出しています。
3.スプラッシュスクリーンの作成
「TweenEngine」を使用します。アニメーションさせるのに楽ちんにできます。ダウンロードして、外部Jarに追加しておいてくださいね。
今回は、tween-engine-api-6.3.3.zipを使用しました。
①SpriteAccessorは後程作成します。
②Gdx.files.internal("img/sprash.png")では、desktopのassetsにアクセスできますが、desktopのassetsがどうやらリンクになっているようですので、Androidからコピーして持ってきてください。でないとアクセスできないですw
③ここでは、一通りアニメーションが終わった場合のコールバックを記載します。まだメニューは作成していないので、終わったら終了させるでよろしいかと思います。
④、⑤のおまじないを追加しておいてください。
4.アクセサーを作成
今回はフェードイン、アウトなので、ALPHA値を変更できる仕組みを提供します。
いかがでしょうか?動きましたか?
この辺りから順に見直してみてください。
カテゴリ追加すればいいのか?www
ということで、カテゴリにLibGDX1.3.1を追加しておきます。
Gradleで作成したプロジェクトは、以下のようになります。
「プロジェクト名」-android
「プロジェクト名」-core
「プロジェクト名」-desktop
とりあえず、Androidは必要ないのですが。。。
Android、Windows、iOSアプリの共通開発は、coreを修正します。
それぞれの個別開発(というよりは、起動時の画面サイズなどの変更程度)はandroid、desktop等を修正します。
今回は、スプラッシュ画面ということで、desktopの呼出し部分の修正と、coreで「TweenEngine」を使用してのアニメーションさせます。
1.スプラッシュ画面呼出し
desktop内のDesktopLauncher を下記のように修正します。
①で呼出し先のクラスを指定しています。
package com.mygdx.game.desktop;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import com.mygdx.game.MyGdxGameButton;
public class DesktopLauncher extends ApplicationAdapter {
private static DesktopLauncher application;
public static void main (String[] arg) {
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.title = MyGdxGameButton.TITLE + "V" + MyGdxGameButton.VERSION;
//ここで設定したいけど、まだMyGdxGameButtonが生成されていないので、
//SplashのShowで行う。
// config.vSyncEnabled = Settings.vSync();
config.vSyncEnabled = true;
config.useGL30 = false;
config.width = 1136; // xperia ray 854
config.height = 640; // xperia ray 480
//フルスクリーン
// config.fullscreen = true;
new LwjglApplication(new MyGdxGameButton(), config); // ①
}
}
2.起動準備
Gameクラスを継承したクラスが呼び出されます。Gameクラスのライフサイクルは「ここ」を参考にしてください。
概念的に、Gameクラスを継承したこのクラス(今回はMyGdxGameButton )をベースにしてスクリーンを張り替えるイメージのようです。
①でスプラッシュ用スクリーンを生成してそのスクリーンを表に表示します。
ここで、見てわかるのは、ほぼスッカラカンのクラスです。そしてすべてオーバーライドしたクラスを呼び出しています。
package com.mygdx.game;
import com.badlogic.gdx.Game;
import com.mygdx.game.sceens.Splash;
public class MyGdxGameButton extends Game{
public static final String TITLE = "OH MY GOD!!!";
public static final String VERSION = "0.0.0.0";
@Override
public void create() {
setScreen(new Splash()); // ①
}
@Override
public void dispose() {
super.dispose();
}
@Override
public void render() {
super.render();
}
@Override
public void resize(int width, int height) {
super.resize(width, height);
}
@Override
public void pause() {
super.pause();
}
@Override
public void resume() {
super.resume();
}
}
3.スプラッシュスクリーンの作成
「TweenEngine」を使用します。アニメーションさせるのに楽ちんにできます。ダウンロードして、外部Jarに追加しておいてくださいね。
今回は、tween-engine-api-6.3.3.zipを使用しました。
①SpriteAccessorは後程作成します。
②Gdx.files.internal("img/sprash.png")では、desktopのassetsにアクセスできますが、desktopのassetsがどうやらリンクになっているようですので、Androidからコピーして持ってきてください。でないとアクセスできないですw
③ここでは、一通りアニメーションが終わった場合のコールバックを記載します。まだメニューは作成していないので、終わったら終了させるでよろしいかと思います。
④、⑤のおまじないを追加しておいてください。
package com.mygdx.game.sceens;
import aurelienribon.tweenengine.BaseTween;
import aurelienribon.tweenengine.Tween;
import aurelienribon.tweenengine.TweenCallback;
import aurelienribon.tweenengine.TweenManager;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.mygdx.game.tween.SpriteAccessor;
public class Splash implements Screen{
private SpriteBatch batch;
private Sprite splash;
private TweenManager tweenManager;
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
tweenManager.update(delta); // ④
batch.begin(); // ⑤
splash.draw(batch);
batch.end();
// dispose();
}
@Override
public void resize(int width, int height) {
splash.setSize(width, height);
}
@Override
public void show() {
//Mainで設定したいけど、
Gdx.graphics.setVSync(Settings.vSync());
batch = new SpriteBatch();
tweenManager = new TweenManager();
Tween.registerAccessor(Sprite.class, new SpriteAccessor()); // ①
Texture splashTexture = new Texture(Gdx.files.internal("img/sprash.png")); // ②
splash = new Sprite(splashTexture);
splash.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
Tween.set(splash, SpriteAccessor.ALPHA).target(0).start(tweenManager);
//フェードイン、フェードアウトした後のコールバックを書くよ!
Tween.to(splash, SpriteAccessor.ALPHA, 2).target(1).repeatYoyo(1, 0.5f).setCallback(new TweenCallback(){
@Override
public void onEvent(int type, BaseTween> source) {
// ((Game) Gdx.app.getApplicationListener()).setScreen(new MainMenu()); // ③
exit(0);
}
}).start(tweenManager);
// tweenManager.update(Gdx.graphics.getDeltaTime());
tweenManager.update(Float.MIN_VALUE);
}
@Override
public void hide() {
dispose();
}
@Override
public void pause() {
// TODO 自動生成されたメソッド・スタブ
}
@Override
public void resume() {
// TODO 自動生成されたメソッド・スタブ
}
@Override
public void dispose() {
batch.dispose();
splash.getTexture().dispose();
}
}
4.アクセサーを作成
今回はフェードイン、アウトなので、ALPHA値を変更できる仕組みを提供します。
package com.mygdx.game.tween;
import aurelienribon.tweenengine.TweenAccessor;
import com.badlogic.gdx.graphics.g2d.Sprite;
public class SpriteAccessor implements TweenAccessor{
public static final int ALPHA = 0;
@Override
public int getValues(Sprite target, int tweenType, float[] returnValues) {
switch(tweenType){
case ALPHA:
returnValues[0] = target.getColor().a;
return 1;
default:
assert false;
return -1;
}
}
@Override
public void setValues(Sprite target, int tweenType, float[] newValues) {
switch(tweenType){
case ALPHA:
target.setColor(target.getColor().r, target.getColor().g,target.getColor().b, newValues[0]);
default:
assert false;
}
}
}
いかがでしょうか?動きましたか?
※このブログではブログの持ち主が承認した後、コメントが反映される設定です。