【JavaFx入門】002.キーボード入力を取得する
キーボード入力を受け取って動作するJavaFxプログラムを書いてみたいと思います。
ここでは、上下左右のキーでウィンドウ内の画像を操作する、RPG風のサンプルプログラムを紹介します。
package Blog; import java.io.File; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.KeyEvent; import javafx.scene.paint.Color; import javafx.stage.Stage; public class Sample extends Application { //変数 int[][] map = { {1,1,1,1,1}, {1,2,0,0,1}, {1,0,0,0,1}, {1,0,0,0,1}, {1,1,1,1,1}, }; int heroX = 1; int heroY = 1; Group root = new Group(); Image wall = new Image(new File("C:\\roguelike\\image\\wall.gif").toURI().toString()); Image floor = new Image(new File("C:\\roguelike\\image\\floor.gif").toURI().toString()); Image hero = new Image(new File("C:\\roguelike\\image\\hero.gif").toURI().toString()); //ステージ、シーンなどの設定 @Override public void start(Stage stg) { stg.setTitle("title"); Scene scene = new Scene(root, 300, 300, Color.BLACK); stg.setScene(scene); printMap(); //sceceにキー受け取りメソッドをセットする scene.setOnKeyPressed(e -> press(e)); stg.show(); } //キーイベントを受け取って処理するメソッド void press(KeyEvent event) { map[heroY][heroX] = 0; //switchで分岐させると分かりやすく記述できる switch (event.getCode()) { case UP: heroY = Math.max(1,heroY-=1); map[heroY][heroX] = 2; break; case DOWN: heroY = Math.min(3,heroY+=1); map[heroY][heroX] = 2; break; case LEFT: heroX = Math.max(1,heroX-=1); map[heroY][heroX] = 2; break; case RIGHT: heroX = Math.min(3,heroX+=1); map[heroY][heroX] = 2; break; } //キー入力を受け取ったあと、描画する printMap(); } //画面を描画する void printMap() { root.getChildren().clear(); for (int i=0; i<5; i++) { for (int j=0; j<5; j++) { ImageView imv = new ImageView(); if (map[i][j] == 1) imv = new ImageView(wall); else if (map[i][j] == 0) imv = new ImageView(floor); else if (map[i][j] == 2) imv = new ImageView(hero); //描画間隔は、画像の大きさによって調整 imv.setX(1+j*16); imv.setY(1+i*16); root.getChildren().add(imv); } } } public static void main(String[] args) { launch(args); } }
今回のプログラムでは3つの画像(hero.gif, wall.gif, floor.gif)を使用していますが、これについては、パソコンに標準で入っているものではありませんので、もしこのプログラムを起動してみたい場合は、各自で用意してください。大きさはそれぞれ16*16で、透過処理を施してあります。
画像を指定したフォルダに配置し起動すると、下のようなウィンドウが出現します。
上下左右のキーで、白い丸(主人公)を操作できます。茶色の点は床で、床の上には移動可能です。茶色の四角は壁で、壁の上には移動できません。
僕もまだ手探りの状態なので、拙いプログラムになっているかもしれませんが、JavaFxでRPGを作ってみたいという方の参考になれば幸いです。