我目前正致力于编写一个字符创建页面,该页面将用户输入的文本传递给我的帐户文件。 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);
}
答案 0 :(得分:1)
我有一个类似的问题(正确调整舞台大小创建的hud,但调整大小后按钮不起作用)
我不知道您是否找到了解决方案,但万一您仍需要帮助和/或其他人遇到同样的问题:
似乎如果你调整游戏大小,inputProcessor就不会更新(或者是sth,dunno)。 帮助我的是重新调整resize()中的hud。我使用输入多路复用器,所以首先我从多路复用器中移除了hud Stage,然后我处理了阶段,再次初始化它并再次将它添加到多路复用器(或将其设置为inputProcessor)。适合我:)