を、このようなボタンを実装:
import org.newdawn.slick.Color;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.geom.Shape;
import org.newdawn.slick.gui.AbstractComponent;
import org.newdawn.slick.gui.GUIContext;
public class Button extends AbstractComponent{
protected int width;
protected int height;
protected int x;
protected int y;
protected int mouseX;
protected int mouseY;
protected boolean pressed;
protected Shape hitbox;
protected boolean over;
protected String text;
public Button(GUIContext container, int x, int y, int width, int height, String text) {
super(container);
setLocation(x, y);
this.width = width;
this.height = height;
this.text = text;
hitbox = new Rectangle(x, y, width, height);
}
@Override
public int getHeight() {
return height;
}
@Override
public int getWidth() {
return width;
}
@Override
public int getX() {
return x;
}
@Override
public int getY() {
return y;
}
public boolean isPressed() {
return pressed;
}
public void update(GUIContext container) {
mouseX = container.getInput().getMouseX();
mouseY = container.getInput().getMouseY();
over = hitbox.contains(mouseX, mouseY);
if (over && container.getInput().isMousePressed(Input.MOUSE_LEFT_BUTTON)) {
pressed = true;
}else{
pressed = false;
}
}
@Override
public void render(GUIContext container, Graphics g) throws SlickException {
g.setColor(Color.blue);
g.fillRect(x, y, width, height);
g.setColor(Color.black);
g.drawString(text, x + width/2, y + height/2);
}
@Override
public void setLocation(int x, int y) {
this.x = x;
this.y = y;
}
をし、それを使用します私のフレームに私は単に書く:
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
public class Menu extends BasicGameState{
public static final int ID = 1;
private StateBasedGame game;
private Button button;
public int getID() {
return ID;
}
@Override
public void init(GameContainer container, StateBasedGame game) throws SlickException {
this.game = game;
button = new Button(container, 1280/2, 720/2, 200, 200, "Works");
}
@Override
public void render(GameContainer container, StateBasedGame game, Graphics g) throws SlickException {
button.render(container, g);
}
@Override
public void update(GameContainer container, StateBasedGame game, int delta) {
button.update(container);
if (button.isPressed()) {
System.out.println("Works");
}
}
}
はい、これは動作しますが、何をしようとしているのは、新しいコンポーネントを作成することです。ちょうどいくつかのパラメータを使ってinitメソッド内で初期化し、renderメソッドでレンダリングすることができます。私はほとんどそれを働かせてきた。 – Hamish
プライベートアレイを作成できます。 初期化では、コンポーネントを作成して配列に追加します。 レンダリングメソッドでは、配列の各コンポーネントを繰り返し処理し、これらのコンポーネントのレンダー機能を呼び出します。 – Alex