调整大小后,Libgdx TextField无法获得焦点

时间:2014-03-16 00:15:10

标签: menu resize libgdx textfield

我目前正致力于编写一个字符创建页面,该页面将用户输入的文本传递给我的帐户文件。 TextFields正确地绘制和调整大小(我假设这是在我在场地周围做一个shaperenderer以试图弄清楚他们的位置是否正确移动,我认为这仍然是问题),他们正在通过Tabbing使用setFocusTravel(true),但字段不会通过鼠标单击更新KeyboardFocus。我的屏幕实现了InputProcessor,舞台是主处理器。

问题在于调整屏幕大小后(我正在运行桌面版,所以点击最大化按钮或拖动边缘)我无法通过点击它们来开始输入任何一个调整大小的TextFields(它没有设置焦点或CursorPosition)。已经在其中键入的文本字段在调整大小后继续接收输入,Tabbing将在未调整大小和调整大小的屏幕中移动KeyboardFocus,但鼠标单击不会在调整大小的屏幕中更改/设置KeyboardFocus。我正在玩addListener到我的TextFields然后让click事件做stage.setKeyboardFocus(desiredTextField),但这没有用。我也尝试将一些InputProcessor代码移动到TouchDown / Up,Render和Resize方法中,但这些方法都没有用。

LibGdx TextField是否存在已知问题?这是我的代码中的东西吗?有没有我没有添加的内容?

以下是我的NewCharacterScreen()类代码的主要部分。

渲染:

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(1,1,1,1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    stage.act(delta);

    batch.setProjectionMatrix(cam.combined);
    batch.begin();
    stage.draw();
    batch.end();

    if(Gdx.input.isKeyPressed(Keys.ESCAPE)) {
        game.goMM();
    }

}

尚未实施调整大小,但显示为:

@Override
public void resize(int width, int height) {
}

@Override
public void show() {
    imageLoader = game.getIL();
    imageLoader.load();
    arkun = imageLoader.getArkun();
    theBlackEra = imageLoader.getBlackEra();
    menufont = new BitmapFont();
    stage = new Stage();
    skin = new Skin();
    skin.addRegions(imageLoader.getAtlas());
    style = new TextFieldStyle(menufont, Color.BLACK, null, null, skin.getDrawable("tfBG"));

    image0 = new Image(arkun);
    image1 = new Image(theBlackEra);

    textfields = new TextField[2];
    textfields[0] = new TextField("Username", style);
    textfields[1] = new TextField("Password", style);
    textfields[0].setFocusTraversal(true);
    textfields[1].setFocusTraversal(true);
    textfields[0].setTouchable(Touchable.enabled);
    textfields[1].setTouchable(Touchable.enabled);

    cam = new OrthographicCamera();
    cam.setToOrtho(false, imageLoader.getScreenWidth(), imageLoader.getScreenHeight());
    batch = new SpriteBatch();

    Vector2 coords3 = new Vector2(imageLoader.getScreenWidth(), imageLoader.getScreenHeight());
    stage.stageToScreenCoordinates(coords3);

    image0.setBounds(imageLoader.getScreenWidth()/2 - arkun.getRegionWidth()/2, 
            imageLoader.getScreenHeight()/2 + arkun.getRegionHeight(), 
            arkun.getRegionWidth(), 
            arkun.getRegionHeight());
    Vector2 coords4 = new Vector2(image0.getX(), image0.getY());
    image0.localToStageCoordinates(coords4);

    image1.setBounds(imageLoader.getScreenWidth()/2 - theBlackEra.getRegionWidth()/2, 
            imageLoader.getScreenHeight()/2 - theBlackEra.getRegionHeight()*2.5f, 
            theBlackEra.getRegionWidth(), 
            theBlackEra.getRegionHeight());
    Vector2 coords5 = new Vector2(image0.getX(), image0.getY());
    image0.localToStageCoordinates(coords5);

    textfields[0].setBounds(imageLoader.getScreenWidth()/2 - imageLoader.getTFBG().getRegionWidth()/2, 
            imageLoader.getScreenHeight()/2 - imageLoader.getTFBG().getRegionHeight()/2, 
            imageLoader.getTFBG().getRegionWidth(), 
            imageLoader.getTFBG().getRegionHeight());

    Vector2 coords = new Vector2(textfields[0].getX(), textfields[0].getY());
    textfields[0].localToStageCoordinates(coords);

    textfields[1].setBounds(imageLoader.getScreenWidth()/2 - imageLoader.getTFBG().getRegionWidth()/2,
            imageLoader.getScreenHeight()/2 - imageLoader.getTFBG().getRegionHeight()*1.5f, 
            imageLoader.getTFBG().getRegionWidth(), 
            imageLoader.getTFBG().getRegionHeight());

    Vector2 coords2 = new Vector2(textfields[1].getX(), textfields[1].getY());
    textfields[1].localToStageCoordinates(coords2);

    stage.clear();
    stage.addActor(image0);
    stage.addActor(image1);
    stage.addActor(textfields[0]);
    stage.addActor(textfields[1]);
    Gdx.input.setInputProcessor(stage);

}

1 个答案:

答案 0 :(得分:1)

我有一个类似的问题(正确调整舞台大小创建的hud,但调整大小后按钮不起作用)

我不知道您是否找到了解决方案,但万一您仍需要帮助和/或其他人遇到同样的问题:

似乎如果你调整游戏大小,inputProcessor就不会更新(或者是sth,dunno)。 帮助我的是重新调整resize()中的hud。我使用输入多路复用器,所以首先我从多路复用器中移除了hud Stage,然后我处理了阶段,再次初始化它并再次将它添加到多路复用器(或将其设置为inputProcessor)。适合我:)