【问题标题】:Libgdx TextField not receiving focus after resize调整大小后,Libgdx TextField 没有收到焦点
【发布时间】:2014-04-21 07:16:44
【问题描述】:

我目前正在编写一个角色创建页面,该页面将用户输入的文本传递到我的帐户文件。 TextFields 正确绘制和调整大小(我假设这是在我在字段周围制作了一个 shaperenderer 以试图确定它们的位置是否没有正确移动,我认为这仍然是问题所在),它们在使用 setFocusTravel 切换时工作(true),但这些字段不会通过鼠标单击更新 KeyboardFocus。我的屏幕实现了 InputProcessor,stage 是主处理器。

问题是在调整我的屏幕大小后(我正在运行桌面版本,所以点击最大化按钮或拖动边缘)我无法通过单击它们开始输入任何一个调整大小的文本字段(它不会设置焦点或光标位置)。已在其中输入的文本字段在调整大小后继续接收输入,制表符将在未调整大小和调整大小的屏幕中移动 KeyboardFocus,但在调整大小的屏幕中鼠标单击不会更改/设置 KeyboardFocus。我在我的 TextFields 中使用 addListener,然后让点击事件执行 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);

}

【问题讨论】:

    标签: menu resize libgdx textfield


    【解决方案1】:

    我遇到了类似的问题(使用适当调整大小的舞台创建的 hud,但调整大小后按钮不起作用)

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

    如果你调整游戏的大小,inputProcessor 似乎没有更新(或者……,不知道)。 帮助我的是在 resize() 中重新初始化 hud。我正在使用一个输入多路复用器,所以首先我从多路复用器中移除了 hud Stage,然后我处理了该阶段,再次对其进行初始化并再次将其添加到多路复用器中(或将其设置为 inputProcessor)。为我工作:)

    【讨论】:

    • 感谢您的回复!我从来没有设法修复它。我最终建立了自己的文本字段类,它对我来说效果很好。不过,我可能会尝试您的建议,我相信这将有助于解决其他问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    相关资源
    最近更新 更多