【发布时间】: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