11

PNG 画像をレンダリングする画面があります (BaseScreen は Screen インターフェイスを実装しています)。画面をクリックすると、タッチした位置に文字が移動します (テスト用)。

public class DrawingSpriteScreen extends BaseScreen {
    private Texture _sourceTexture = null;
    float x = 0, y = 0;

    @Override
    public void create() {
        _sourceTexture = new Texture(Gdx.files.internal("data/character.png"));
    }

    .
    .
}

画面のレンダリング中に、ユーザーが画面に触れた場合、タッチの座標を取得し、それらを使用してキャラクター イメージをレンダリングします。

@Override
public void render(float delta) {
    if (Gdx.input.justTouched()) {
        x = Gdx.input.getX();
        y = Gdx.input.getY();
    }

    super.getGame().batch.draw(_sourceTexture, x, y);
}

問題は、画像を描画するための座標が左下の位置から始まり (LibGDX Wiki に記載されているように)、タッチ入力の座標が左上隅から始まることです。私が抱えている問題は、右下をクリックすると、画像が右上に移動することです。私の座標は X 675 Y 13 で、タッチすると画面の上部近くになります。ただし、座標は左下から始まるため、文字は下に表示されます。

なぜですか?座標系が逆なのはなぜですか? これを判断するために間違ったオブジェクトを使用していませんか?

4

4 に答える 4

17

衝突を検出するには、 を使用しますcamera.unproject(vector3)。私は次のように設定vector3しました:

x = Gdx.input.getX();     
y = Gdx.input.getY();
z=0;

このベクトルを に渡しますcamera.unproject(vector3)。このベクトルを使用xyて、キャラクターを描きます。

于 2013-05-13T04:38:50.410 に答える
4

私は同じ問題を抱えていました、私は単にこれをしました。

public boolean touchDown(int screenX, int screenY, int pointer, int button) {

    screenY = (int) (gheight - screenY);
    return true;
}

ユーザーから入力を取得するたびに、Gdx.input.getY(); を使用しないでください。代わりに (Gdx.graphics.getHeight()-Gdx.input.getY()) を使用してください。

于 2014-12-02T10:28:24.757 に答える