【JavaFX:2D横スクロールアクションゲーム】画像、音声の読み込み、ゲーム起動の実装
しばらく放置していましたがゲームプログラムのほうもぼちぼち進めていこうと思います。
| 前の記事 | 横スクロールアクションゲームTop | 次の記事 |
まずは基本の画像、音声読み込みや起動部分をさらっと作ってしまいます。
クラス構成は前回の的当てゲームでも利用したような形をそのまま流用します。
AppManagerに初期化メソッドstartを作成し、ここに初期化処理を実装します。
ライブラリの
GTKManagerFX.start(Stage, タイトル,アイコンパス,ウィンドウ横幅, ウィンドウ縦幅, 初期表示する画面)
を利用しウィンドウ表示処理を行います。GTKManagerFXには画像の取得や音声の再生を実行できるメソッドがあります。
一度取得した、効果音や画像データは自動的にキャッシュされますので、何度も同じデータをロードせずに済みます。
画像は的当てゲームの時よりも量がかなり増えましたので、ロード処理はDirectoryStreamを利用し、フォルダ内のファイルを全ロードするプログラムにしました。(※別にロードはしなくても問題ない)
効果音も同じ要領で実装しておきます。
//ゲームプログラムを開始する
public static void start(Stage stage, ViewType type) {
//ウィンドウの表示
GTKManagerFX.start(stage, "障害物回避ゲーム","img/icon.png",800, 600, get(type));
//画像フォルダの中身を全ロード
try (DirectoryStream ds = Files.newDirectoryStream(Paths.get("img"))){
ds.forEach(p -> GTKManagerFX.loadImage(p.toString()));
} catch (IOException e) {
e.printStackTrace();
}
//効果音フォルダの中身を全ロード
try (DirectoryStream ds = Files.newDirectoryStream(Paths.get("se"))){
ds.forEach(p -> GTKManagerFX.loadSE(p.toString()));
} catch (IOException e) {
e.printStackTrace();
}
}
次にBGMの再生メソッド、停止メソッド、画像の取得メソッドを作成します。画像や効果音はメソッドをたくさん作るのもどうかと思ったので、引数にファイル名を渡すと取得できるようにしました。
あとは画面遷移のメソッドや、アプリケーション終了メソッドなども用意しておきましょうか。
AppManager.java
package com.nompor.app.manager;
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import com.nompor.app.view.DescriptionMode;
import com.nompor.app.view.GameMode;
import com.nompor.app.view.TitleMode;
import com.nompor.app.view.ViewType;
import com.nompor.gtk.fx.GTKManagerFX;
import com.nompor.gtk.fx.GameViewFX;
import javafx.scene.image.Image;
import javafx.stage.Stage;
//ゲームの画像や音声再生、画面遷移を制御するメソッド群
public class AppManager {
//ゲームBGM開始
public static void gameBGMStart() {
GTKManagerFX.loopBGM("bgm/aozoranoshitade.mp3");
}
//ゲームタイトル開始
public static void titleBGMStart() {
GTKManagerFX.loopBGM("bgm/title.mp3");
}
//ゲームBGMの停止
public static void gameBGMStop() {
GTKManagerFX.stopBGM();
}
//ゲームプログラムを開始する
public static void start(Stage stage, ViewType type) {
//ウィンドウの表示
GTKManagerFX.start(stage, "障害物回避ゲーム","img/icon.png",800, 600, get(type));
//画像フォルダの中身を全ロード
try (DirectoryStream ds = Files.newDirectoryStream(Paths.get("img"))){
ds.forEach(p -> GTKManagerFX.loadImage(p.toString()));
} catch (IOException e) {
e.printStackTrace();
}
//効果音フォルダの中身を全ロード
try (DirectoryStream ds = Files.newDirectoryStream(Paths.get("se"))){
ds.forEach(p -> GTKManagerFX.loadSE(p.toString()));
} catch (IOException e) {
e.printStackTrace();
}
}
//画像を読み込む
public static Image getImage(String fileName) {
return GTKManagerFX.getImage("img/"+fileName+".png");
}
//効果音を再生する
public static void playSE(String fileName) {
GTKManagerFX.playSE("se/"+fileName+".mp3");
}
//ゲーム画面を遷移する
public static void change(ViewType type) {
GTKManagerFX.changeViewDefaultAnimation(get(type));
}
//ウィンドウ横幅取得
public static double getW() {
return GTKManagerFX.getWidth();
}
//ウィンドウ縦幅取得
public static double getH() {
return GTKManagerFX.getHeight();
}
//ゲーム画面を取得する
private static GameViewFX get(ViewType type) {
switch(type) {
case TITLE:
return new TitleMode();
case GAME:
return new GameMode();
case DESCRIPTION:
return new DescriptionMode();
default:
break;
}
return null;
}
//アプリケーションを終了する
public static void end() {
GTKManagerFX.end();
}
}
ObstacleAvoidStarter.javaにメインメソッドを実装します。JavaFXを利用しますので、Applicationクラスを継承し、startメソッドにStageを渡すようにしておきます。
import javafx.application.Application;
import javafx.stage.Stage;
//アプリケーションエントリポイント
public class ObstacleAvoidStarter extends Application{
public static void main(String[] args) {
launch(args);
}
public void start(Stage stage) throws Exception {
//初期化時はタイトルを表示する
AppManager.start(stage, ViewType.TITLE);
}
}
次の記事ではタイトル画面を作成するつもりでしたが、急遽予定を変更して、いきなりゲーム画面を作成するところから始めることにします。というのも、タイトル画面やチュートリアルでは最終的にはゲーム画面で使用するロジックを流用するつもりだからです。








ディスカッション
コメント一覧
まだ、コメントがありません