2Dゲームを開発し、OrthographicCameraとViewportを使用して、仮想ボードのサイズを実際の表示サイズに変更します。ステージに画像を追加し、ClickListenerを使用してクリックを検出します。正常に動作しますが、解像度を変更すると正しく動作しません(正しいアクターを検出できないため、新しい元のxとyに問題があると思います)。これを修正する方法はありますか?
質問する
1578 次
3 に答える
3
画面座標を世界座標に変換する必要があります。あなたのカメラはそれをすることができます。あなたは両方の方法を行うことができます、cam.project(...)
そしてcam.unproject(...)
または、すでにActorsを使用している場合は、カメラを自分で初期化するのではなく、を使用してStage
ください。ステージを作成し、それにアクターを追加します。その後、ステージが座標変換を行います。
于 2012-06-28T18:06:07.707 に答える
1
かつて私もこの問題に苦しんでいましたが、最終的には、libgdxのSpriteBatchまたはStageを使用して何かを描画するための実用的な解決策を手に入れました。整形外科カメラを使用して、これを行うことができます。
まず、ゲームに最適な一定の解像度を1つ選択します。ここでは1280*720(風景)を撮りました。
class ScreenTest implements Screen{
final float appWidth = 1280, screenWidth = Gdx.graphics.getWidth();
final float appHeight = 720, screenHeight = Gdx.graphics.getHeight();
OrthographicCamera camera;
SpriteBatch batch;
Stage stage;
Texture img1;
Image img2;
public ScreenTest(){
camera = new OrthographicCamera();
camera.setToOrtho(false, appWidth, appHeight);
batch = new SpriteBatch();
batch.setProjectionMatrix(camera.combined);
img1 = new Texture("your_image1.png");
img2 = new Image(new Texture("your_image2.png"));
img2.setPosition(0, 0); // drawing from (0,0)
stage = new Stage(new StretchViewport(appWidth, appHeight, camera));
stage.addActor(img2);
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(img, 0, 0);
batch.end();
stage.act();
stage.act(delta);
stage.draw();
// Also You can get touch input according to your Screen.
if (Gdx.input.isTouched()) {
System.out.println(" X " + Gdx.input.getX() * (appWidth / screenWidth));
System.out.println(" Y " + Gdx.input.getY() * (appHeight / screenHeight));
}
}
//
:
:
//
}
このコードを任意のタイプの解像度で実行すると、邪魔されることなくその解像度で調整されます。
于 2015-01-08T10:19:41.923 に答える
0
Stageは使いやすいと思います。何か間違っている場合は、コードを確認する必要があると思います。
public Actor hit(float x, float y)
于 2012-07-01T07:52:52.070 に答える