質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.85%

  • Java

    12458questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    5975questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • ゲーム開発

    156questions

  • スクロール

    25questions

    スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

  • libGDX

    15questions

    libGDXとは、Javaでゲームを作るための開発ライブラリで、WindowsやMac OS X,、Linuxなどのデスクトップ、Android,やiOS、Blackberryといったモバイル、そしてHTML5 までのマルチプラットフォームをサポートしています。

LibGDXで背景を自動スクロールさせたい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 28

pkbrasegali

score 0

シューティングゲームで背景がスクロールするようにさせたいのですが、どのように実装すればいいでしょうか?
背景画像は576x1024で、1枚の画像をスクロールさせるつもりです。

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.ScreenAdapter;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.utils.viewport.FitViewport;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.viewport.ScreenViewport;
import java.util.Random;

public class GameScreen extends ScreenAdapter implements InputProcessor {

    static final float CAMERA_WIDTH = 10;
    static final float CAMERA_HEIGHT = 15;
    static final float WORLD_WIDTH = 10;
    static final float WORLD_HEIGHT = 15 * 20; //20画面登ればクリア
    static final float GUI_WIDTH = 320;
    static final float GUI_HEIGHT = 480;

    static final int GAME_STATE_READY = 0;
    static final int GAME_STATE_PLAYING = 1;
    static final int GAME_STATE_GAMEOVER = 2;

    private Stage stage;
    private ShootingGame mGame;

    Sprite mBg;
    OrthographicCamera mCamera;

    FitViewport mViewPort;

    private Rectangle player;
    Random mRandom;
    Player mPlayer;

    int mGameState;
    Vector3 touchPos;

    public GameScreen(ShootingGame game) {
        mGame = game;
        stage = new Stage(new ScreenViewport());
        mCamera = (OrthographicCamera) stage.getViewport().getCamera();
        // 背景の準備
        Texture bgTexture = new Texture("back_02.png");
        // TextureRegionで切り出す時の原点は左上
        mBg = new Sprite(new TextureRegion(bgTexture, 0, 0, 576, 1024));
        mBg.setSize(CAMERA_WIDTH, CAMERA_HEIGHT);
        mBg.setPosition(0, 0);

        // カメラ、ViewPortを生成、設定する
        mCamera = new OrthographicCamera();
        mCamera.setToOrtho(false, CAMERA_WIDTH, CAMERA_HEIGHT);
        mViewPort = new FitViewport(CAMERA_WIDTH, CAMERA_HEIGHT, mCamera);

        // メンバ変数の初期化
        mRandom = new Random();
        mGameState = GAME_STATE_READY;
        touchPos = new Vector3();


        if (mGame.mRequestHandler != null) {
            mGame.mRequestHandler.showAds(true);
        }


        createStage();

    }

    @Override
    public void show() {

    }

    @Override
    public void render(float delta) {
        // それぞれの状態をアップデートする
        update(delta);

        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        // カメラの座標をアップデート(計算)し、スプライトの表示に反映させる
        mCamera.update();
        mGame.batch.setProjectionMatrix(mCamera.combined);

        mGame.batch.begin();
        mBg.setPosition(mCamera.position.x - CAMERA_WIDTH / 2, mCamera.position.y - CAMERA_HEIGHT / 2);
        mBg.draw(mGame.batch);

        //Player
        mPlayer.draw(mGame.batch);

        mGame.batch.end();

    }

    @Override
    public void resize(int width, int height) {
        mViewPort.update(width, height);
    }

    private void createStage() {
        // テクスチャの準備
        Texture playerTexture = new Texture("player.png");

        // Playerを配置
        mPlayer = new Player(playerTexture, 0, 0, 128, 128);
        mPlayer.setPosition(WORLD_WIDTH / 2 - mPlayer.getWidth() / 2, WORLD_WIDTH / 2);

        Gdx.input.setInputProcessor(this);
    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {

    }

    @Override
    public void hide() {

    }

    @Override
    public void dispose() {

    }

    private void update(float delta) {
        switch (mGameState) {
            case GAME_STATE_READY:
                break;
            case GAME_STATE_PLAYING:
                break;
            case GAME_STATE_GAMEOVER:
                break;
        }
    }

    @Override
    public boolean keyDown(int keycode) {
        return false;
    }

    @Override
    public boolean keyUp(int keycode) {
        return false;
    }

    @Override
    public boolean keyTyped(char character) {
        return false;
    }

    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
        mCamera.unproject(touchPos);
        return false;
    }

    @Override
    //指が離されたとき
    public boolean touchUp(int screenX, int screenY, int pointer, int button) {
        return false;
    }

    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {
        touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
        mCamera.unproject(touchPos);
        mPlayer.setPosition(touchPos.x - mPlayer.getWidth()/2, touchPos.y - mPlayer.getHeight()/2);


        return false;
    }

    @Override
    public boolean mouseMoved(int screenX, int screenY) {
        return false;
    }

    @Override
    public boolean scrolled(int amount) {
        return false;
    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • mts10806

    2018/06/06 10:05

    現在のコードで「何が」「どう」問題があるのか具体的に記載してください。現在の質問内容では要件が伝わりにくく回答が得られにくいように思います。質問テンプレートをご活用ください。https://teratail.com/help/question-tips#questionTips3-8

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.85%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Javaクラス使い方

    ###前提・実現したいこと JavaクラスのTest1,Test2があったとしてTest1のJPanelにTeat2で作ったグラフなどを描画したいのですがJavaクラスの使い方、

  • 解決済

    じゃんけんの手の組み合わせ。

    前提・実現したいこと じゃんけんの手の組み合わせの課題でエラーが起きているのですが、 どこが間違っているのかわかりません。 入力は以下のフォーマットで与えられます。 N a

  • 解決済

    androidstudio 色検出

    androidstudioで色検出をしようとしています。このサイトのコードをほぼほぼコピペしたのですが FdActivity.javaでonCreateOptionsMenuの中の

  • 解決済

    android opencv で色検出

    私はandroidstudioでアプリ開発を行なっており今opencvを使っています。 フレームの中に入っている緑の色をしている領域の中で一番面積が大きいものを選び出し、その輪郭を

  • 解決済

    Mac android 間のデータ通信

    私はandroidstudioでアプリ開発を行なっています。 実現させたいこと ジャイロセンサーで数値を獲得して、その数値をリアルタイムでmacに表示させたい 問題点 ジャ

  • 受付中

    openCVを使った画素値取得とその座標の保存方法

    前提・実現したいこと 私は今、androidstudioでJavaとopencvを使って 画像認識を利用したアプリを開発しています。 その中でImgproc.GaussianB

  • 解決済

    android opencvで輪郭描画

    私はandroidstudioでアプリ開発を行っています。 実現したいこと opencvで赤い色を検知して赤色を白に、それ以外を黒にしてそのあとに赤い物の輪郭の中心座標を返した

  • 解決済

    ワニワニパニックをjavaで作りたいのですがうまくできません。お助けください。

    前提・実現したいこと スタートボタンによりゲームを開始、ゲーム終了後にスタート画面に戻る。 ワニの出る位置を固定したい。 1分間でゲーム終了。 得点のランキング付け。 発生して

同じタグがついた質問を見る

  • Java

    12458questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    5975questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • ゲーム開発

    156questions

  • スクロール

    25questions

    スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

  • libGDX

    15questions

    libGDXとは、Javaでゲームを作るための開発ライブラリで、WindowsやMac OS X,、Linuxなどのデスクトップ、Android,やiOS、Blackberryといったモバイル、そしてHTML5 までのマルチプラットフォームをサポートしています。