光滑按钮不起作用

时间:2013-08-10 19:57:23

标签: java button lwjgl slick

我正在关注一个关于java游戏的视频教程(所以我可以从那里开始),但我的一个按钮不起作用(退出按钮)。请帮忙。我正在使用lwjgl和光滑。

主要课程:

package javagame;

import org.newdawn.slick.*;
import org.newdawn.slick.state.*;

public class Game extends StateBasedGame {

public static final String gamename = "Java Game Alpha 1.0";

public static final int menu = 0;
public static final int play = 1;

public Game(String gamename) {
    super(gamename);

    this.addState(new Menu(menu));
    this.addState(new Play(play));


}

public void initStatesList(GameContainer gc) throws SlickException{

    this.getState(menu).init(gc, this);
    this.getState(play).init(gc, this);
    this.enterState(menu);


}

public static void main(String[] args) {

    AppGameContainer appgc;

    try{

        appgc = new AppGameContainer(new Game(gamename));

        appgc.setDisplayMode(1600, 800, false);

        appgc.start();

    }catch(SlickException e) {

        e.printStackTrace();

    }



}

}

菜单类:

package javagame;

import org.newdawn.slick.*;
import org.newdawn.slick.state.*;

import org.lwjgl.input.Mouse;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.GameState;
import org.newdawn.slick.state.StateBasedGame;

public class Menu implements GameState {

Image PlayNow;
Image exitGame;

public Menu(int state){



}

@Override
public void mouseClicked(int arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub

}

@Override
public void mouseDragged(int arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub

}

@Override
public void mouseMoved(int arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub

}

@Override
public void mousePressed(int arg0, int arg1, int arg2) {
    // TODO Auto-generated method stub

}

@Override
public void mouseReleased(int arg0, int arg1, int arg2) {
    // TODO Auto-generated method stub

}

@Override
public void mouseWheelMoved(int arg0) {
    // TODO Auto-generated method stub

}

@Override
public void inputEnded() {
    // TODO Auto-generated method stub

}

@Override
public void inputStarted() {
    // TODO Auto-generated method stub

}

@Override
public boolean isAcceptingInput() {
    // TODO Auto-generated method stub
    return false;
}

@Override
public void setInput(Input arg0) {
    // TODO Auto-generated method stub

}

@Override
public void keyPressed(int arg0, char arg1) {
    // TODO Auto-generated method stub

}

@Override
public void keyReleased(int arg0, char arg1) {
    // TODO Auto-generated method stub

}

@Override
public void controllerButtonPressed(int arg0, int arg1) {
    // TODO Auto-generated method stub

}

@Override
public void controllerButtonReleased(int arg0, int arg1) {
    // TODO Auto-generated method stub

}

@Override
public void controllerDownPressed(int arg0) {
    // TODO Auto-generated method stub

}

@Override
public void controllerDownReleased(int arg0) {
    // TODO Auto-generated method stub

}

@Override
public void controllerLeftPressed(int arg0) {
    // TODO Auto-generated method stub

}

@Override
public void controllerLeftReleased(int arg0) {
    // TODO Auto-generated method stub

}

@Override
public void controllerRightPressed(int arg0) {
    // TODO Auto-generated method stub

}

@Override
public void controllerRightReleased(int arg0) {
    // TODO Auto-generated method stub

}

@Override
public void controllerUpPressed(int arg0) {
    // TODO Auto-generated method stub

}

@Override
public void controllerUpReleased(int arg0) {
    // TODO Auto-generated method stub

}

@Override
public void enter(GameContainer arg0, StateBasedGame arg1)
        throws SlickException {
    // TODO Auto-generated method stub

}

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

@Override
public void init(GameContainer gc, StateBasedGame sbg)
        throws SlickException {
    // TODO Auto-generated method stub

    PlayNow = new Image ("res/PlayNow.png");
    exitGame = new Image ("res/exitGame.png");

}

@Override
public void leave(GameContainer arg0, StateBasedGame arg1)
        throws SlickException {
    // TODO Auto-generated method stub

}

@Override
public void render(GameContainer gc, StateBasedGame sbg, Graphics g)
        throws SlickException {
    // TODO Auto-generated method stub

    g.drawString("It's time for an adventure!", 50, 50);


    //g.drawRect(730, 320, 70, 80); //x, y, width, height

    PlayNow.draw(680, 320, 250, 50);
    exitGame.draw(680, 380, 250, 50);

    int xpos = Mouse.getX();

    int ypos = Mouse.getY();

    g.drawString("Mouse Position: " + xpos + " " + ypos, 10, 22);

}

@Override
public void update(GameContainer gc, StateBasedGame sbg, int delta)
        throws SlickException {
    // TODO Auto-generated method stub

    int xpos = Mouse.getX();

    int ypos = Mouse.getY();

    Input input = gc.getInput();

    //play now

    if( (xpos > 683) && (xpos < 920) && (ypos > 440) && (ypos < 478) ) {

        if(Mouse.isButtonDown(0)) {

            sbg.enterState(1);

        }

    //exit Game

    if ( (xpos > 683) && (xpos < 920) && (ypos > 379) && (ypos < 417) ) {

        if(Mouse.isButtonDown(0)) {

            gc.exit();

            }

        }

    }

    }


}

还有一个班级,但没关系。请帮忙!

1 个答案:

答案 0 :(得分:0)

问题是你的第二个if语句嵌套在第一个语句中。因此,第一个语句必须为true才能退出第二个语句。不幸的是,第一个陈述是真的,第二个陈述永远不会成真。所以第二个永远不会执行。

第一个if需要ypos>440 && ypos<478。第二个if需要ypos>379 && <417。这两个范围之间没有重叠,因此第二个if永远不会执行。这是您的代码,格式更清晰。

if( (xpos > 683) && (xpos < 920) && (ypos > 440) && (ypos < 478) ) {
    if(Mouse.isButtonDown(0)) {
        sbg.enterState(1);
    }
    //ypos will never be less than 417 because to reach this point it MUST
    //be greater than 440 due to first if statement.
    if ( (xpos > 683) && (xpos < 920) && (ypos > 379) && (ypos < 417) ) {
        if(Mouse.isButtonDown(0)) {
            gc.exit();
        }
    }
}

这是解决方案:

if( (xpos > 683) && (xpos < 920) && (ypos > 440) && (ypos < 478) ) {
    if(Mouse.isButtonDown(0)) {
        sbg.enterState(1);
    }
}
//exit Game
if ( (xpos > 683) && (xpos < 920) && (ypos > 379) && (ypos < 417) ) {
    if(Mouse.isButtonDown(0)) {
        gc.exit();
    }
}

现在第二个if独立于第一个。