0

カメラで固定アスペクト比の仮想画面解像度を使用しています。Initは次のようになります。

this.cam = new OrthographicCamera(Config.VIRTUAL_VIEW_WIDTH,
                Config.VIRTUAL_VIEW_HEIGHT);
        this.cam.setToOrtho(false, Config.VIRTUAL_VIEW_WIDTH,
                Config.VIRTUAL_VIEW_HEIGHT);
        // create our stage
        this.stage = new Stage(0, 0, true);
        this.stage.clear(); // always clear the stage too to not get double
                            // stuff in a stage

        stage.setCamera(cam);
//some more stuff
@Override
    public void resize(int width, int height) {
        // this.cam.setToOrtho(false, width, height);

        // calculate new viewport
        float aspectRatio = (float) width / (float) height;
        float scale = 1f;
        Vector2 crop = new Vector2(0f, 0f);

        if (aspectRatio > Config.ASPECT_RATIO) {
            scale = (float) height / (float) Config.VIRTUAL_VIEW_HEIGHT;
            crop.x = (width - Config.VIRTUAL_VIEW_WIDTH * scale) / 2f;
        } else if (aspectRatio < Config.ASPECT_RATIO) {
            scale = (float) width / (float) Config.VIRTUAL_VIEW_WIDTH;
            crop.y = (height - Config.VIRTUAL_VIEW_HEIGHT * scale) / 2f;
        } else {
            scale = (float) width / (float) Config.VIRTUAL_VIEW_WIDTH;
        }

        float w = (float) Config.VIRTUAL_VIEW_WIDTH * scale;
        float h = (float) Config.VIRTUAL_VIEW_HEIGHT * scale;
        viewport = new Rectangle(crop.x, crop.y, w, h);
    }

レンダリング自体は短いです:

@Override
public void render(float delta) {
    cam.update();
    // setting the viewport
    Gdx.gl.glViewport((int) viewport.x, (int) viewport.y,
            (int) viewport.width, (int) viewport.height);
    // the following code clears the screen with the given RGB color (black)
    Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    // update and draw the stage actors
    stage.act(delta);
    stage.draw();

これは本当にうまく機能し、仮想解像度で作業できます。しかし、タッチパッドで問題が発生しました。私は単にこのようにそれを初期化します:

Gdx.input.setInputProcessor(stage);

skin = new Skin();
        skin.add("knob", new Texture("touchpad/touchKnob.png"));
        skin.add("background", new Texture("touchpad/touchBackground.png"));

        style = new TouchpadStyle();
        // skin.add
        style.knob = skin.getDrawable("knob");
        style.background = skin.getDrawable("background");

        pad = new Touchpad(10, style);
        pad.setBounds(0, Config.VIRTUAL_VIEW_HEIGHT - 150, 150, 150);
        this.stage.addActor(pad);

画面が仮想画面に適合しない場合、パッドは左上端にありますが、実際には仮想カム上にあるため、正しいタッチでは反応しないか、反応しません。

それを解決する方法の提案はありますか?

これがその写真です。表示される領域は変更されないため、常にマップ全体が表示されます。タッチパッドが「ある」領域に色を付けました。Menüのボタンでも同じ問題が発生しました。

ここに画像の説明を入力してください

4

1 に答える 1

0

他のフォーラムの助けを借りて自分で解決しました。カメラがズームアウト/ズームインするようにサイズ変更方法を変更しました。

@Override
    public void resize(int width, int height) {
        cam.viewportHeight = height;
        cam.viewportWidth = width;
        if (Config.VIRTUAL_VIEW_WIDTH / cam.viewportWidth < Config.VIRTUAL_VIEW_HEIGHT
                / cam.viewportHeight) {
            cam.zoom = Config.VIRTUAL_VIEW_HEIGHT / cam.viewportHeight;
        } else {
            cam.zoom = Config.VIRTUAL_VIEW_WIDTH / cam.viewportWidth;
        }
        cam.update(); // update it ;)
    }
于 2013-03-27T12:20:34.563 に答える