【问题标题】:Libgdx adding a UI button separated from the gamescreenLibgdx 添​​加与游戏屏幕分离的 UI 按钮
【发布时间】:2014-04-28 19:35:17
【问题描述】:

我有一个 GameScreen,其中有 100 个“点”在屏幕上随机弹跳。我目前正在添加一个 UI 按钮以旋转屏幕;一个在左边,一个在右边。该按钮有效,但是,该按钮“链接”到相机,因为随着屏幕旋转(由于相机旋转,点的运动场旋转),按钮随之旋转。我希望将按钮固定在设备屏幕上,而不是随着点的基础字段旋转。

我是否必须以某种方式取消投影按钮,或者为任何 UI 元素(按钮、仅顶部的状态栏标题等)创建一个单独的阶段?非常感谢。

这是我的代码:

public class GameScreen implements Screen {

final jGdxDots game;
final MyGestureListener myGestureListener;

OrthographicCamera camera;
private Skin skin;

final int NUMBER_OF_DOTS = 100;
int dotTotal;

private Stage stage;

FPSLogger fpsLogger;

float cameraRotate = 0f;


public GameScreen(final jGdxDots gam) {
    this.game = gam;
    fpsLogger = new FPSLogger();

    camera = new OrthographicCamera();
    camera.setToOrtho(false, 800, 480); //boolean = YDOWN or YUP axis.

    //create stage
    stage = new Stage(Gdx.graphics.getWidth(),Gdx.graphics.getHeight(),true);
    //set stage to handle the inputs
    //Gdx.input.setInputProcessor(stage);

    stage.setCamera(camera);
    //stage.setViewport(800, 480, true);

    //multiplex the gesture listeners (both for stage and my listener)
    myGestureListener = new MyGestureListener();
    GestureDetector gd = new GestureDetector(myGestureListener);
    InputMultiplexer im = new InputMultiplexer(gd, stage); // Order matters here!
    Gdx.input.setInputProcessor(im);


    //UI button
    skin = new Skin(Gdx.files.internal("data/uiskin.json"));
    final TextButton button = new TextButton("Rotate", skin, "default");
    button.setWidth(100f); //200f
    button.setHeight(100f); //20f
    button.setPosition(10f, 10f);
    button.addListener(new ClickListener(){
        @Override
        public boolean touchDown(InputEvent event, float x, float y,
                int pointer, int button) {
            // TODO Auto-generated method stub

            cameraRotate = 1f;

            return super.touchDown(event, x, y, pointer, button);


        }

        @Override
        public void touchUp(InputEvent event, float x, float y,
                int pointer, int button) {
            // TODO Auto-generated method stub
            super.touchUp(event, x, y, pointer, button);

            cameraRotate = 0f;
        }

    });

    stage.addActor(button);

    spawnDots(stage);


}

private void spawnDots(Stage theStage) {
    //Rectangle raindrop = new Rectangle();

    for (int i=0; i < NUMBER_OF_DOTS; i++) {

        DotActor dot = new DotActor();
        dot.setOrigin(8,8); //(dot.getWidth()/2, dot.getHeight()/2);
        dot.vector.set(MathUtils.random(1,4), MathUtils.random(1,4));
        dot.actorX = MathUtils.random(0, 800 - dot.getWidth());
        dot.actorY = MathUtils.random(0, 480 - dot.getHeight());
        stage.addActor(dot);

    }

    dotTotal = NUMBER_OF_DOTS;
}

@Override
public void dispose() {
    stage.dispose();
}


@Override
public void render(float delta) {
    //clear screen
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    //logger
    fpsLogger.log();

    //camera.zoom += 0.005f;
    camera.rotate(cameraRotate); //(1.0f);


    camera.update();

    //run act() method of each actor 
    stage.act(Gdx.graphics.getDeltaTime());

    //run each actor's draw() method who are members of this stage
    stage.draw();

}



}

【问题讨论】:

    标签: java android button libgdx stage


    【解决方案1】:

    我也有这个问题。创建一个单独的阶段,或者您可能只想使用“渲染器”类中的精灵批次直接绘制

    我的看起来像这样:

    public OverlayRenderer()
    {
        this.spriteBatch = new SpriteBatch();
        this.loadTextures();
    }
    
    public void render(String _message)
    {
        this.spriteBatch.begin();
        this.spriteBatch.draw(TEXTURES.UI, 0, 0);
        ....
    }
    

    直接在你的

    之后
    stage.draw();
    

    行,我会添加

    overLayRenderer.render();
    

    【讨论】:

    • 我没有意识到你可以做到这一点。我为 UI 元素创建了第二个阶段,并为这个新阶段创建了第二个相机。现在一切都很好。谢谢!
    • 在我看来,分离UI和游戏阶段是解决这个问题的好方法,因为大多数游戏的摄像头都在左右移动,但UI应该保持在同一个地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 2014-10-21
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多