現在、EclipseとJDK1.8.0_92のJavaFXで何かゲームを作ろうと考え、骨組みを構築しているところです。
ウィンドウの解像度が高すぎるせいか、キャラの画像(32x32)を表示した際に小さすぎて困っています。
現状のソースコードは以下になります。
GameAppクラスをMainクラスで継承し、main()内でcreate()メソッドとlaunch()メソッドを呼び出します。
また_init()メソッド内で画像読み込み、_loop()メソッド内でgcに画像表示処理を行おうと考えています。
public abstract class GameApp extends Application{
/* 定数 */
final static double DEFAULT_FPS = 60.0f;// 既定のfps値
final static int DEFAULT_WIDTH = 640; // 既定の画面横サイズ
final static int DEFAULT_HEIGHT= 480; // 既定の画面縦サイズ
/* FPS変数(省略) */
/* システム変数 */
public static ArrayList<String> input; // キー入力用リスト
public static String title; // 画面タイトル
public static int window_width, window_height; // ウィンドウサイズ
public static int scene_width, scene_height; // 解像度サイズ(として使う予定)
/* システムインスタンス */
Group root; // ルート
Scene scene; // シーン
Canvas canvas; // キャンバス
GraphicsContext gc; // グラフィックコンテキスト
/* 変数初期化メソッド(省略) */
public static void create(String title);
/* 変数初期化メソッド(省略) */
public static void create(String title, double fps);
/* 変数初期化メソッド(省略) */
public static void create(String title, int width, int height);
/* 変数初期化メソッド(省略) */
public static void create(String title, int width, int height, double fps);
/* 変数初期化メソッド(省略) */
public static void create(String t, int window_w, int window_h, int scene_w, int scene_h, double fps){
input = new ArrayList<String>();
title = t;
window_width = window_w;
window_height = window_h;
scene_width = scene_w;
scene_height = scene_h;
}
/* ループメソッド */
private void _rean(Stage s){
Timeline gameLoop = new Timeline();
gameLoop.setCycleCount( Timeline.INDEFINITE );
KeyFrame kf = new KeyFrame( Duration.seconds(fps), new EventHandler<ActionEvent>(){
public void handle(ActionEvent ae){
_clear(); // 画面クリア
_loop(s, gc); // 主処理
_fps(); // FPS計算
}
});
gameLoop.getKeyFrames().add( kf );
gameLoop.play();
}
/* 画面クリアメソッド */
private void _clear(){
gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight());
}
/* システム初期化メソッド */
private void _system(Stage s){
s.sizeToScene(); // シーンのサイズを画面に合わせる?
s.setWidth(window_width); // 画面サイズをwindow_widthに設定
s.setHeight(window_height); // 画面サイズをwindow_heightに設定
s.setTitle( title ); // タイトル設定
s.setResizable(false); // リサイズ禁止
/* 定型的な初期設定処理 */
canvas = new Canvas( window_width, window_height );
root = new Group();
root.getChildren().add( canvas );
scene = new Scene( root );
s.setScene( scene );
gc = canvas.getGraphicsContext2D();
initKeyBoard(); // キー入力準備
}
/* FPS計算メソッド(省略) */
private void _fps();
/* キー入力受付メソッド(省略) */
private void initKeyBoard();
/* 起動メソッド */
public void start(Stage s){
_system(s); // システムの初期化
_init(s); // 任意の初期化(オーバーライド)
_rean(s); // ループ処理
s.show(); // 表示処理
}
/* 抽象メソッド */
public abstract void _init(Stage s);
/* 抽象メソッド */
public abstract void _loop(Stage s, GraphicsContext gc);
}
DXライブラリのようにImageインスタンスによる裏画面処理を行い、
ウィンドウサイズまで引き伸ばして表画面に反映させようとも考えたのですが、
JavaFXのImageクラスがComponentクラスを継承していないため
createImage()メソッドを利用することが出来ず断念。
そもそも解像度なんて簡単に変更出来るのではないかと
色々調べてみたのですが、なかなか理解出来る記事が見当たらず
トピックを立てるに至りました。
長くなりましたが、質問としては
① JavaFXで裏画面処理は必要無いのでしょうか?(方法自体ない?)
② 画面解像度の設定はどうすればいいでしょうか?
の二点です
Javaは何年か触っているので基本的な知識はあると思います。
JavaFXについては一週間ほどの初心者です。
まだ理解に苦しむ点が多いですが、何卒アドバイスお願いします。