DJGL-STG-画面の表示

画面の表示


今回は準備~画面の表示までです。
ここからよく分からない用語などが出てきます。プログラムを組む上では重要ですが、ゲームを作る上ではあまり重要ではありません。よく分からない項目は読み飛ばして最悪ソースコード写すだけでも大丈夫です。

準備


下記を環境構築を参考に行ってください。
  1. 「firstShooting」という名前のプロジェクトを作る。
  2. ライブラリをプロジェクトで使えるようにする(ビルドパスへ追加)。
  3. 「FIrstShooting」という名前のメインクラスを作成する。
  4. 環境構築のウインドウを表示するプログラムの「TestGame」を「FirstShooting」に書き換えて書き写してウインドウが表示されるか確かめてください。(エラーが出るなら環境構築に失敗しているので、間違ってないか確認してください)

これで最低限の準備ができました。

クラス


 今までupdateとdrawもメインクラスに書いていましたが、本来はMainメソッドのあるクラスと分割したほうがいいです。Javaには複数のテキストファイル(クラス)に分けてプログラムを書ける機能があります。クラスはそれぞれがコードの担当箇所を持ち、その担当箇所のコードを記述します。
 それを使ってソースコードを分割して、管理しやすくします。今は短いコードですが、実装していくと長くなって1つのテキストファイルに書いていくとどんどん見づらくなります。最初は複数のテキストファイルを切り替えて見るのがしんどいと思いますが、慣れていきましょう。
  • クラスの話は長くなるので割愛します。(必要なところで解説)

GameSceneクラス


※ここ以降プログラミングの考え方の話とかが出てくるので、よく分からないと感じた場合は無理に理解しようとしなくて大丈夫です。とりあえずソースコードを写して、後の記事とかの内容やコードを見ながらゆっくり理解していってください。詳しく理解しなくても、使えることができればゲームを作る上であんまり問題無いです。
 ゲーム全体を管理するクラスを作ります。下記の手順でクラスを作ってください。環境構築のときとほぼ同じですが、自動的にコードを生成する部分を消しています。
  1. プロジェクトエクスプローラーのプロジェクト内の「src」ディレクトリを右クリック
  2. 出てきたメニューの「新規」にカーソルをあわせる
  3. サブメニュー内の「クラス」を選択
  4. 「名前」の欄に「GameScene」と入力。
  5. 「完了」を押す。

以上の手順はクラスを作るときに毎回行います。「名前」の欄に入れる文字を変えるだけです。この手順は覚えておいてください。

できたJavaファイルに以下のコードを入力してください。やっていることはウインドウの表示のupdateメソッドとdrawメソッドを抜き出しただけです。


  1. import java.awt.Color;
  2.  
  3. import densan.s.game.drawing.Drawer;
  4. import densan.s.game.manager.Updatable;
  5.  
  6.  
  7. public class GameScene implements Updatable{
  8.  
  9. public GameScene() {
  10.  
  11. }
  12.  
  13. @Override
  14. public void update() {
  15.  
  16. }
  17.  
  18. @Override
  19. public void draw(Drawer d) {
  20. //ちゃんとクラスを使えてるか確認するための文字描画
  21. d.setColor(Color.BLUE);
  22. d.setFontSize(40);
  23. d.drawString("TEST", 100, 100);
  24.  
  25. }
  26.  
  27. }
  28.  

GameSceneの解説


  • updateとdrawを抜き出してdrawで文字を描画するようにしました。
  • 以下難しい話
  • 7行目の「imprements Updatable」ですが、これはインターフェースというものです。かんたんに言うと、「Updatableで定義されているメソッドをこのクラスは使えますよ」ということを示すためのものです。imprementsすることを実装すると言い、「imprements A」とされたクラスを「Aを実装したクラス」といいます。
    • Updatableで定義されているメソッドはupdateとdrawです。
    • これを実装したクラスのみを、GameManagerのsetUpdatableメソッドの引数することができます。


FirstShootingクラス


こちらのクラスはメインメソッドのみにします。かなり短いので、以前のコードから消去するよりも全部消してから1から書いたほうが早いかも。

  1. import densan.s.game.manager.GameManager;
  2.  
  3.  
  4. public class FirstShooting {
  5.  
  6. public static void main(String[] args) {
  7. //ゲームを管理するクラスを取得
  8. GameManager gm = GameManager.getInstance();
  9. //このメソッドでウインドウを表示する
  10. //引数はそれぞれ(幅, 高さ, タイトルバーに表示する文字)
  11. gm.createFrame(800, 600, "シューティングゲーム");
  12. //更新と描画を担うオブジェクトを設定
  13. //今はあまり関係ない
  14. gm.setUpdatable(new GameScene());
  15. }
  16.  
  17. }
  18.  

ここまで実装できたなら、FirstShootingクラスを実行してみましょう。以下のような画面がでれば成功です。ウインドウが表示されているのに文字が描画されていない場合、GameSceneのdrawメソッドが怪しいです。


FirstShootingの解説


内容はウインドウの表示と更新・描画処理をGameSceneクラスに委譲しているだけで自機このクラス自体はほとんど何もしていません。
※委譲:他のクラスに処理を任せること。オブジェクト指向の用語。

  • 14行目のGameManager.setUpdatableメソッドに描画・更新処理を任せるクラスを生成(new)して渡すことで勝手にそのクラスに書いた内容が実行されます。
  • 以下難しい話
  • 正確にはGameManager.setUpdatableメソッドにUpdatableを実装したクラスを入れることで、そのクラスに更新・描画処理を委譲できます。

まとめ


 これでゲームの画面が表示されました!ライブラリを使っているのでかなり短いコードですみます。ゲームづくりの第一歩です。この画面に自機や敵を追加していってゲームを作っていきます。
 次回は操作できる自機を作ります。



名前:
コメント:

すべてのコメントを見る