下図のように、デバイスの画面より大きな画像を、
カメラの移動をして全体を見る実験をしてみました。
黄色い四画がカメラで、矢印に沿ってカメラ移動をします。
カメラ移動のイメージ |
desktopでの実行結果 |
ざっと、手順を書くと以下のようになります。
- Accessorクラスを用意
- Tween/TweenManagerを準備
- フレーム毎にTweenManagerの更新をする。
今回使った Accessorクラス(抜粋)
・・・ public class CameraAccessor implements TweenAccessor<vector2> { public static final int MOVE = 0; @Override public int getValues(Vector2 target, int tweenType, float[] returnValues) { switch (tweenType) { case MOVE: returnValues[0] = target.x; returnValues[1] = target.y; return 2; default: break; } return 0; } @Override public void setValues(Vector2 target, int tweenType, float[] newValues) { switch (tweenType) { case MOVE: target.x = newValues[0]; target.y = newValues[1]; break; default: break; } } }
createメソッド内で Tween/TweenManager の設定をします。
ソース(抜粋)
・・・ @Override public void create() { ・・・ // Tweenの設定 tweenManager = new TweenManager(); Tween.setWaypointsLimit(10); Tween.registerAccessor(Vector2.class, new CameraAccessor()); Tween.to(camPos, CameraAccessor.MOVE, 10.0f) .waypoint(0.0f, 25.0f) .waypoint(10.0f, 25.0f) .waypoint(10.0f, 0.0f) .waypoint(20.0f, 0.0f) .waypoint(20.0f, 25.0f) .waypoint(30.0f, 25.0f) .path(TweenPaths.linear) .ease(Linear.INOUT).target(30.0f, 0.0f).start(tweenManager); ・・・ }renderメソッド内で TweenManagerの更新をします。
ソース(抜粋)
・・・ @Override public void render() { Gdx.gl.glClearColor(1, 1, 1, 1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // ビューポート(描画領域)を設定 Gdx.gl.glViewport((int) viewport.x, (int) viewport.y, (int) viewport.width, (int) viewport.height); // カメラ位置を設定 (右上に移動) camera.position.set(camPos.x + LOGICAL_WIDTH / 2.0f, camPos.y + LOGICAL_HEIGHT / 2.0f, 0.0f); camera.update(); batch.setProjectionMatrix(camera.combined); // 描画 batch.begin(); batch.draw(texture, 0, 0, 40.0f, 40.0f); batch.end(); // カメラ移動 tweenManager.update(Gdx.graphics.getDeltaTime()); } ・・・
サンプルのダウンロード
0 件のコメント:
コメントを投稿