広告
広告
↓発売日:2017年04月04日↓
![]() |
Java 第2版 入門編 ゼロからはじめるプログラミング (プログラミング学習シリーズ) 新品価格 |
今回はJAVA言語を使った2Dゲームを作成する上での最低限のプログラムをご紹介します。
今回の内容は冒頭にお話しした通り、クラスライブラリの扱い方などの知識が必要ですが、今回は初心者向けという事もあるので詳しい説明は避けたいと思います。
このように書けばひとまず2Dゲームの土台ができるとカタチで覚えて頂ければと思います。
では最初にウィンドウを表示してみます。
import javafx.application.Application;
import javafx.stage.Stage;
public class BreakoutMain extends Application{
public static void main(String args[]){
launch(args);
}
@Override
public void start(Stage stage){
stage.setTitle("BREAKOUT");
stage.show();
}
}
ウィンドウの表示には「javafx.stage.Stage;」ってものを使ってます。
この「Stage」なるものが下地となってここに絵を描く為の機能とかゲームやアニメーションに使う高速で場面を切り替える機能なんかを追加していく感じになります。
今までの「public static void main()」は「launch(args)」とかいうのがあるだけで、この後いじる事はありません。
広告
ではゲームの為の高速描画機能を追加していきます。
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.animation.AnimationTimer;
public class BreakoutMain extends Application{
private BreakoutThread breakoutthread;
public static void main(String args[]){
launch(args);
}
@Override
public void start(Stage stage){
stage.setTitle("BREAKOUT");
Pane pane = new Pane();
Scene scene = new Scene(pane);
stage.setScene(scene);
Canvas canvas = new Canvas(640,480);
GraphicsContext gc = canvas.getGraphicsContext2D();
pane.getChildren().add(canvas);
breakoutthread = new BreakoutThread(gc);
breakoutthread.start();
stage.show();
}
}
class BreakoutThread extends AnimationTimer{
private GraphicsContext gc;
/*変数の宣言などを書いていく*/
private int count;
BreakoutThread(GraphicsContext gc){
this.gc = gc;
/*コンストラクタ*/
/*最初の1回だけ実行されるので初期化などを書く*/
count = 0;
}
@Override
public void handle(long time){
gc.clearRect(0,0,640,480);
/*ゲームループ*/
/*この部分がすごい速さで繰り返される*/
/*メインプログラムを書く*/
gc.fillText("count = " + count,450,450);
count++;
}
/*この後に追加の自作メソッドなどを書いていく*/
}
すごい勢いで画面右下のカウントが増加すれば成功です。
いきなりプログラムが増えましたが案ずる事はありません。
これでほぼ土台は完了です。
キー入力の部分がここにはまだ入ってませんが、それは必要になった時に再び追加していきます。
一言ではとても説明しきれない内容ですが、「Canvas」や「GraphicsContext」と書いてあるらへんで絵を描く為の機能を追加して、その後の「class B_PThread extends AnimationTimer」の部分が高速に場面を切り替える為の機能を追加しているような感じになります。
まあ、細かい事は抜きにしてこれを一つのカタチとしてコメントの場所にプログラムを書いていけば2Dゲームはできるという事です。
もちろんこのカタチのまま他の場面にも使えますのでぜひコピペして使いまわしてください。
今回は高速描画されている事を確認する為に「count」という変数を用意してそれをインクリメントしながら画面に表示しております。
コメントの内容とともに一つ一つ確認していってみましょう。
まずは先頭、変数の宣言部分です。
/*変数の宣言などを書いていく*/ private int count;
この「private」っていうのはこのクラス「class B_PThread extends AnimationTimer」のカッコの外からのアクセスを制限する為のものですが、とりあえずは何も考えず変数の宣言時は先頭にこれを書いておけば大丈夫です。
続いて「コンストラクタ」と書いてある部分です。
BreakoutThread(GraphicsContext gc){
this.gc = gc;
/*コンストラクタ*/
/*最初の1回だけ実行されるので初期化などを書く*/
count = 0;
}
この部分はコンストラクタという部分でコメントの通り最初の1回だけ実行されるので初期化などを書いていきます。
今回は先ほどの変数「count」を初期化しております。
続いて「ゲームループ」と書いてある部分です。
@Override
public void handle(long time){
gc.clearRect(0,0,640,480);
/*ゲームループ*/
/*この部分がすごい速さで繰り返される*/
/*メインプログラムを書く*/
gc.fillText("count = " + count,450,450);
count++;
}
こちらもコメントの通りすごい速さでこの部分が繰り返されるので、たとえばキャラクターを描画、少し移動、再び描画などと書いていけば結果キャラクターが動いているように見えるというワケです。
なんとなく想像はつくかと思いますが
gc.clearRect(0,0,640,480);
このメソッドで一回一回画面をクリアにしております。
なのでこれを書かないと前に描いた内容がすべて残ります。
そして「gc.fillText()」というのを使用して文字を画面に描画しております。
gc.fillText("count = " + count,450,450);
サンプルの通り変数の内容なども表示する事ができます。
ちなみに指定した座標の上に文字が現れます。
座標を(0,0)などに指定すると文字が隠れてしまっていたりするのでご注意ください。
もちろん文字を描くだけではなく図形なども描く事ができるので興味がある方は「java fx GraphicsContext リファレンス」などでインターネット検索してみてください。
あとは最後に自作メソッドなど追加したい場合はコメントの部分に書いていきます。
ざっと説明しましたがここまでが最低限のプログラムの内容になります。
今のトコロはピンとこないかもしれませんが次回以降プログラムを追加していくにつれなんとなくカタチが掴めてくるかと思います。
ここまでの中間ソースになります。
では次回はボールを移動させて壁にぶつかったら反射させるトコロまでをやっていきましょう!
広告
↓発売日:2017年04月18日↓
![]() |
Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで 新品価格 |
↓発売日:2016年06月25日↓
![]() |
新品価格 |
↓発売日:2016年08月31日↓
![]() |
新品価格 |
↓発売日:2018年11月21日↓
![]() |
新品価格 |
↓発売日:2016年12月15日↓
![]() |
新品価格 |
↓発売日:2016年09月28日↓
![]() |
新品価格 |