Slick2D更新文本/单击选项

时间:2015-04-10 02:18:28

标签: java slick2d

嘿所以我正在研究slick2D中的一个小项目,我试图在播放器和npc之间添加交互,你可以点击选择回复。

public class House extends BasicGameState {
Image house;
Image message;
int msgID = 0;
...

public House(int state) {

}

public void init(GameContainer gc, StateBasedGame sbg)
        throws SlickException {
    ...

}

public void render(GameContainer gc, StateBasedGame sbg, Graphics g)
        throws SlickException {

    house.draw(playerPositionX, playerPositionY);
    player.draw(shiftX, shiftY);

    if (exitHouse == true){
        g.drawString("Would you like to exit the house? Y/N", 520, 270);
    }
    if (msgID == 1){
        message.draw(0, 570);
        mollerFace.draw(39, 610);
        ttf.drawString(46,588, "Moller");
        ttf.drawString(180, 609, "'Ello fella, you interested in some russian dolls?");
        ttf.drawString(908, 613, "- Russian dolls?" );//option 1
        ttf.drawString(908, 633, "- No" );//option2
        if (Play.spokeToMarkus){
            ttf.drawString(908, 653, "- Biscuits?" );//option3 hidden
        }
    } else if (msgID == 2){
        message.draw(0, 570);
        mollerFace.draw(39, 610);
        ttf.drawString(46,588, "Moller");
        ttf.drawString(180, 609, "Russian dolls are a set of dolls where each doll is different size, designed to fit in each other.");
        ttf.drawString(180, 636, "I can't recall how it's related to the module but it somehow is! ");
        ttf.drawString(908, 613, "- Interesting" );//option 1
        if (Play.spokeToMarkus){
            ttf.drawString(908, 633, "- Biscuits?" );//option 2 hidden
        }
    }
     else if (msgID == 3){
            message.draw(0, 570);
            mollerFace.draw(39, 610);
            ttf.drawString(46,588, "Moller");
            ttf.drawString(180, 609, "Biscuits? I don't really have any biscuits but I know where to get them from.");
            ttf.drawString(180, 636, "But first I'm dying, get me something to drink and I'll help ya' out");
            ttf.drawString(908, 613, "- Fine" );//option 1
        }
}


public void update(GameContainer gc, StateBasedGame sbg, int delta)
        throws SlickException {
    Input input = gc.getInput();
    // move up
    if (input.isKeyDown(Input.KEY_UP)) {
    up(delta);
    }
    // move down
    if (input.isKeyDown(Input.KEY_DOWN)) {
        down(delta);
    }

    // move left
    if (input.isKeyDown(Input.KEY_LEFT)) {
        left(delta);
    }
    // move right
    if (input.isKeyDown(Input.KEY_RIGHT)) {
        right(delta);
    }

    //speaking to moller

    if (msgID == 1){
        //option 1
        if ((Mouse.getX() > 907 && Mouse.getX()< 1023) 
                && (Mouse.getY() > 88 && Mouse.getY() < 107)) {
            if (input.isMouseButtonDown(0)) {
                msgID = 2;

                System.out.println("1");
            }
        }
        //option 2
        if ((Mouse.getX() > 907 && Mouse.getX()< 940) 
                && (Mouse.getY() > 69 && Mouse.getY() < 83)) {
            if (input.isMouseButtonDown(0)) {
                msgID = 0;
                System.out.println("2");
            }
        }
        //option 3
        if ((Mouse.getX() > 907 && Mouse.getX()< 982) 
                && (Mouse.getY() > 46 && Mouse.getY() < 66)) {
            if (input.isMouseButtonDown(0)) {
                if(Play.spokeToMarkus){
                msgID = 3;
                System.out.println("3");
                }
            }
        }
    }
    if (msgID == 2){
        //option 1
        if ((Mouse.getX() > 907 && Mouse.getX()< 1023) 
                && (Mouse.getY() > 88 && Mouse.getY() < 107)) {
            if (input.isMouseButtonDown(0)) {
                msgID = 0;
                System.out.println("4");
            }
        }
        //option 2
        if ((Mouse.getX() > 907 && Mouse.getX()< 983) 
                && (Mouse.getY() > 69 && Mouse.getY() < 83)) {
            if (input.isMouseButtonDown(0)) {
                if(Play.spokeToMarkus){
                    msgID = 3;
                    System.out.println("5");
                }
            }
        }
    }
     if (msgID == 3){
        //option 1
        if ((Mouse.getX() > 907 && Mouse.getX()< 1023) 
                && (Mouse.getY() > 88 && Mouse.getY() < 107)) {
            if (input.isMouseButtonDown(0)) {
                msgID = 0;
                System.out.println("6");
            }
        }
    }

在运行游戏时: 当说到npc msgID变为1时,玩家有2个选项&#34;俄罗斯娃娃&#34;和&#34;不&#34;。 点击&#34;俄罗斯娃娃&#34;应该将用户带到下一条消息(msgID = 2),用户可以在其中回复&#34;有趣的&#34;将它们带回msgID = 0。

我的问题是当点击&#34;俄语娃娃&#34;时,重新运行更新方法,从而选择&#34;有趣&#34;即刻。 我尝试修复它但没有成功,当我选择&#34;俄罗斯娃娃&#34;时,系统输出(&#34; 1,4&#34;)只需点击一下。

单击第一个选项会选择第一个选项两次,从而将玩家返回到原始状态。似乎无法修复:/

1 个答案:

答案 0 :(得分:1)

所以这里发生的事情是它需要输入鼠标按钮时的输入,所以当鼠标按钮关闭时它将执行它所涉及的所有内容。你需要做的是让它不仅仅是一个鼠标,而是你需要使if语句像这样。只是你知道这是sudo代码。

boolean isMouseButtonDown = false;

if(inputForMouseButton == true && isMouseButtonDown == false && msgID == 2){
   //do what ever is in the if statement for going to the next chat
   isMouseButtonDown = true;
}

if(inputForMouseButton == false && isMouseButtonDown == true){
    isMouseButtonDown = false;
}

在代码中尝试这样的事情。