Java Slick2D中带有BasicGameState的文本字段不应答

Java Slick2D中带有BasicGameState的文本字段不应答,java,textfield,lwjgl,slick2d,Java,Textfield,Lwjgl,Slick2d,我目前正在用Java开发一个简单的多人游戏Slick2D。菜单结构会稍微复杂一点,因为我需要几个文本字段来获取要连接的服务器地址、允许玩的玩家数量、昵称等信息 我把我的问题分为三类:主类(ExampleGame)从StateBasedGame,Play和菜单从BasicGameState扩展而来 类播放和菜单各有一个文本字段和一个按钮。我的问题是我只能在textfield中键入其中一个类。当您单击文本字段时,其他文本字段不显示任何光标响应 这是主要的类示例游戏: public class Exa

我目前正在用Java开发一个简单的多人游戏Slick2D。菜单结构会稍微复杂一点,因为我需要几个文本字段来获取要连接的服务器地址、允许玩的玩家数量、昵称等信息

我把我的问题分为三类:主类(
ExampleGame
)从
StateBasedGame
Play
菜单从
BasicGameState
扩展而来

播放
菜单
各有一个文本字段和一个按钮。我的问题是我只能在textfield中键入其中一个类。当您单击文本字段时,其他文本字段不显示任何光标响应

这是主要的类示例游戏:

public class ExampleGame extends StateBasedGame  {

public static final int MAIN_MENU_STATE = 0;
public static final int GAME_PLAY_STATE = 1;

public ExampleGame(String name) {
    super(name);

    this.addState(new Menu(MAIN_MENU_STATE));
this.addState(new Play(GAME_PLAY_STATE));

this.enterState(MAIN_MENU_STATE);
}

/**
 * @param args
 */
public static void main(String[] args) {
     AppGameContainer appgc;
 try{
    appgc = new AppGameContainer(new ExampleGame("ExampleGame"));
    appgc.setDisplayMode(640, 360, false);
    appgc.setTargetFrameRate(50);
    appgc.start();
 }catch(SlickException e){
    e.printStackTrace();
 }
}

@Override
public void initStatesList(GameContainer arg0) throws SlickException {
    // TODO Auto-generated method stub
    this.getState(GAME_PLAY_STATE);
    this.getState(MAIN_MENU_STATE);


System.out.println(this.getStateCount() + ", " + this.getCurrentStateID());
this.enterState(MAIN_MENU_STATE);
}
}

ExampleGame自动调用主菜单(Menu.java):

public类菜单扩展了BasicGameState{
私有int stateID;
私有图像背景;
专用Unicont字体;
私有文本字段文本字段;
私有图像创建选项;
私有整数menuX=50;
私有整数menuY=250;
公共菜单(int stateID){
this.stateID=stateID;
}
@凌驾
公共void init(GameContainer arg0,StateBasedName arg1)引发异常{
System.out.println(“StateID:+arg1.getState(this.getID())+”,State:+arg1.getCurrentState());
背景=新图像(“图像/背景_1024x640_v1.jpg”);
createGameOption=新图像(“图像/btn_CreateGame_for_1024x640_v1.png”);
textfield=新的textfield(arg0,arg0.getDefaultFont(),100100200,30);
}
@凌驾
公共void呈现(GameContainer arg0、StateBasedGame arg1、Graphics arg2)引发异常{
//TODO自动生成的方法存根
背景绘制(0,0);
createGameOption.draw(menuX,menuY);
render(arg0,arg2);
}
@凌驾
公共无效更新(GameContainer arg0、StateBasedName arg1、int arg2)引发异常{
Input=arg0.getInput();
int mouseX=input.getMouseX();
int mouseY=input.getMouseY();
//如果鼠标在按钮上
如果((mouseX>=menuX&&mouseX=menuY&&mouseY=menuX&&mouseX=menuY&&mouseY


这正是我不久前回答的您正在寻找的答案。该用户与您有相同的问题,并通过使用StateBasedGame的示例通过我的wiki链接解决了它。您确定这是同一个问题吗?我尝试将我的SBG更改为您建议的方式,但它已经相当类似。而且没有骰子。是不是很滑2d是否能够处理多个文本字段?
public class Menu extends BasicGameState {

private int stateID;
private Image background;
private UnicodeFont font;
private TextField textfield;
private Image createGameOption;
private int menuX = 50;
private int menuY = 250;


public Menu(int stateID) {
    this.stateID = stateID;
}


@Override
public void init(GameContainer arg0, StateBasedGame arg1) throws SlickException {

    System.out.println("StateID: " + arg1.getState(this.getID()) + " , State: " + arg1.getCurrentState());

    background = new Image("images/background_1024x640_v1.jpg");
    createGameOption = new Image("images/btn_CreateGame_for_1024x640_v1.png");

    textfield = new TextField(arg0, arg0.getDefaultFont(), 100, 100, 200, 30);
}


@Override
public void render(GameContainer arg0, StateBasedGame arg1, Graphics arg2) throws SlickException {
    // TODO Auto-generated method stub
    background.draw(0, 0);
    createGameOption.draw(menuX, menuY);
    textfield.render(arg0, arg2);

}


@Override
public void update(GameContainer arg0, StateBasedGame arg1, int arg2) throws SlickException {

    Input input = arg0.getInput();

    int mouseX = input.getMouseX();
    int mouseY = input.getMouseY();

    // if mouse is over a button
    if ((mouseX >= menuX && mouseX <= menuX + createGameOption.getWidth()) && (mouseY >= menuY && mouseY <= menuY + createGameOption.getHeight())) {

        if (input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)) {
            // fx.play();
            arg1.enterState(ExampleGame.GAME_PLAY_STATE);
        }

    }

}


@Override
public int getID() {
    // TODO Auto-generated method stub
    return stateID;
}
public class Play extends BasicGameState {

private int stateID;
private Image background;
private UnicodeFont font;
private TextField textfield;
private Image createGameOption;
private int menuX = 350;
private int menuY = 250;


public Play (int stateID) {
    this.stateID = stateID;
}

@Override
public void init(GameContainer arg0, StateBasedGame arg1) throws SlickException {

    System.out.println("StateID: " + arg1.getCurrentStateID() + " , State: " + arg1.getCurrentState());
    arg1.inputStarted();

    background = new Image("images/background_1024x640_v1.jpg");
    createGameOption = new Image("images/btn_CreateGame_for_1024x640_v1.png");

    textfield = new TextField(arg0, arg0.getDefaultFont(), 150, 100, 200, 30);
}

@Override
public void render(GameContainer arg0, StateBasedGame arg1, Graphics arg2) throws SlickException {
    // TODO Auto-generated method stub
    background.draw(0,0);
    createGameOption.draw(menuX, menuY);
    textfield.render(arg0, arg2);
}

@Override
public void update(GameContainer arg0, StateBasedGame arg1, int arg2) throws SlickException {

    Input input = arg0.getInput();

    int mouseX = input.getMouseX();
    int mouseY = input.getMouseY();

    if ((mouseX >= menuX && mouseX <= menuX + createGameOption.getWidth()) 
            && (mouseY >= menuY && mouseY <= menuY + createGameOption.getHeight())) {

        if (input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)) {
            arg1.enterState(ExampleGame.MAIN_MENU_STATE);
        }
    }
}

@Override
public int getID() {
    // TODO Auto-generated method stub
    return stateID;
}