JavaFX でゲームプログラミング超入門 その3
戦闘画面を作る
JavaFX でRPGを作るということで、今回は戦闘画面の骨組みを考えて見ました。
左下の枠に戦闘で用いるコマンドを表示し、右側は具体的なものは表示していませんが、プレイヤのステータスを入れたいと思います。
コマンドを選択する三角形をキーボードのUPとDOWNで動かせるようにしています。
また、戦闘画面では、モンスターの画像を表示したいと思います。
コード
public class FightScene extends Application{ public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception{ stage.setTitle("FightScene"); stage.setWidth(768); stage.setHeight(576); Rectangle rect1 = new Rectangle(20, 370, 120, 150); rect1.setStroke(Color.BLACK); rect1.setArcWidth(20); rect1.setArcHeight(20); rect1.setFill(null); Rectangle rect2 = new Rectangle(160, 370, 560, 150); rect2.setStroke(Color.BLACK); rect2.setArcWidth(20); rect2.setArcHeight(20); rect2.setFill(null); //Double []d = new Double[]{0.0, 0.0, 100.0, 0.0, 50.0, 70.0}; Double []d = new Double[]{0.0, 0.0, 0.0, 20.0, 14.0, 10.0}; Polygon choice = new Polygon(); //choice.setRotate(270); choice.getPoints().addAll(d); choice.setLayoutX(35); choice.setLayoutY(380); choice.setFill(Color.BLACK); int labelX = 55; int labelY = 376; Label label1 = new Label("戦う"); label1.setFont(new Font(20)); label1.setLayoutX(labelX); label1.setLayoutY(labelY); Label label2 = new Label("魔法"); label2.setFont(new Font(20)); label2.setLayoutX(labelX); label2.setLayoutY(labelY+32); Label label3 = new Label("アイテム"); label3.setFont(new Font(20)); label3.setLayoutX(labelX); label3.setLayoutY(labelY+64); Label label4 = new Label("防御"); label4.setFont(new Font(20)); label4.setLayoutX(labelX); label4.setLayoutY(labelY+96); Group labelGroup = new Group(); labelGroup.getChildren().addAll(label1, label2, label3, label4); // VBox hbox = new VBox(); // hbox.getChildren().addAll(label1, label2); // hbox.setLayoutX(60); // hbox.setLayoutY(380); Group gp = new Group(); gp.getChildren().addAll(rect1, rect2, choice, labelGroup); Scene scene = new Scene(gp); scene.setOnKeyPressed(event -> pointEvent(event, choice)); stage.setScene(scene); stage.show(); } public void pointEvent(KeyEvent event, Polygon choice) { double point = choice.getLayoutY(); String s = event.getCode().toString(); if(s.equals("DOWN")) { if(point == 476) { choice.setLayoutY(380); }else { choice.setLayoutY(point + 32); } } if(s.equals("UP")) { if(point == 380) { choice.setLayoutY(476); }else { choice.setLayoutY(point - 32); } } } }