自機の作成
今回は自機を動かすまでです。
キーボードで操作する方法が出てきます。実行したゲームが自分の手で動かせると楽しくなってきます。
クラス
自機のクラスを作成します。前のページに有るクラス作成の手順を参考に「Player」という名前のクラスを作成してください。さらに以下のコードを打ち込んでください。
import java.awt.Color;
import java.awt.event.KeyEvent;
import densan.s.game.drawing.Drawer;
import densan.s.game.input.KeyInput;
import densan.s.game.object.GameObjectBase;
public class Player extends GameObjectBase {
public static final int SPEED = 2;
public Player() {
super(100, 100, 50, 50);
}
@Override
public void update() {
if (KeyInput.
isPressing(KeyEvent.
VK_UP)) { addY(-SPEED);
}
if (KeyInput.
isPressing(KeyEvent.
VK_DOWN)) { addY(SPEED);
}
if (KeyInput.
isPressing(KeyEvent.
VK_RIGHT)) { addX(SPEED);
}
if (KeyInput.
isPressing(KeyEvent.
VK_LEFT)) { addX(-SPEED);
}
}
@Override
public void draw(Drawer d) {
d.fillRect(getX(), getY(), getWidth(), getHeight());
}
}
さらに、GameSceneを以下のように変更してください。変更点はコメントで記述しています。
import java.awt.Color;
import densan.s.game.drawing.Drawer;
import densan.s.game.manager.Updatable;
public class GameScene implements Updatable{
//------------
//変更点開始
/////////////////
private Player player;
/////////////////
//変更点終了
//------------
public GameScene() {
//------------
//変更点開始
/////////////////
this.player = new Player();
/////////////////
//変更点終了
//------------
}
@Override
public void update() {
//------------
//変更点開始
/////////////////
player.update();
/////////////////
//変更点終了
//------------
}
@Override
public void draw(Drawer d) {
//ちゃんとクラスを使えてるか確認するための文字描画
d.setFontSize(40);
d.drawString("TEST", 100, 100);
//------------
//変更点開始
/////////////////
player.draw(d);
/////////////////
//変更点終了
//------------
}
}
firstShootingは変更無しです。打ち込めたらFirstShootingを実行してください。
以下のような画面が出れば成功です。青い四角は矢印キーで上下左右に移動できます。青い四角が出ない場合、きちんとGameSceneが書き換えられているか確認してください。
Playerの解説
ライブラリのゲーム上に表示されるものを作るのに便利な機能を使って作っています。
難しい話
GameObjectBaseというクラスを継承したクラスです。GameObjectBaseクラスはライブラリのクラスでゲーム上に表示されるオブジェクト(プレイヤーや敵、アイテムなど)用の抽象クラスです。そのようなオブジェクト用のクラスを作りたいときはこのクラスを継承すると作りやすいです。(用語がよく分からない場合はとりあえず画面上のオブジェクトを作るときはGameObjectBaseを継承すると作りやすいとおぼえておいてください。)
GameObjectBaseについて詳しくは
http://kiki33.bitbucket.org/densan/s/game/object/GameObjectBase.html
- 9行目はGameObjectBaseを継承しています。
- 11行目はPlayerの移動速度を表しています。この数値を変えるとPlayerの速度が変わります。
- 13~15行目はコンストラクタ(初期化をする場所)です。
- 14行目のsuper()でオブジェクトの座標とサイズを指定しています。GameObjectの引数は(オブジェクトの左上x座標, オブジェクトの左上y座標, オブジェクトの幅, オブジェクトの高さ)です。
- 今回は(100,100)の座標に幅50高さ50で設定しています。
- 18~33行目はupdateメソッドです。GameSceneのupdateと同じで更新、つまりプレイヤーの更新処理を記述します。
- 19~30行目はプレイヤーをキーによって上下左右に移動させるクラスです。
- 19,22,25,28行目のKeyInput.isPressing(KeyEvent.VK_キー名)はキー名が押されているかどうかを判定するKeyInputのメソッドです。キーが押されていればtrueを返します。
- KeyInputについてはDJGL-キー入力
- 20,23,26,29行目のaddXやaddYはこのオブジェクト、つまりプレイヤーの座標のxやyに数値を加えることができます。
- 引数に入れた数字だけ動きます。ゲーム画面の座標系は上下だけが反転しているので、addXに+を入れると右、ーを入れると左、addYに+を入れると下、ーを入れると上に動きます。
- 36~40行目はdrawメソッドです。これもGameSceneのdrawメソッドと同じように描画、つまりプレイヤーの描画を担当します。
- 37行目で色を指定しています。
- 38行目で塗りつぶされた四角形を描画しています。
- fillRectメソッドの引数は 四角形の左上x座標、四角形の左上y座標、四角形の幅、四角形の高さ です。引数の項目に入っているメソッド(getXなど)はそれぞれオブジェクトの左上x座標、左上y座標、幅、高さを取得するGameObjectBaseのメソッドです。つまりオブジェクトの座標と幅、高さの四角形を描画しています。
- 以下難しい話
- public class クラス名 extends 継承するクラス名 と書くと継承できます。今回の場合はPlayerクラスにGameObjectBaseを継承しています。
- PlayerはGameObjectBaseを継承してるのでaddXなどのメソッドをそのまま使えます。継承やクラスについての詳しいことはここでは割愛します。
GameSceneの書き換え部分の解説
GameSceneの更新部分は主に上記で作ったPlayerクラスを使うようにしている部分です。
- 11行目でPlayerの変数を作っています。
- 19行目でPlayerの変数にPlayerを生成して入れています。
- 30行目でPlayerの更新メソッドを呼び出しています。
- 45行目でPlayerの描画メソッドを呼び出しています。
ちょっと難しい話
クラスを別のクラスで使うには基本的にそのクラスのフィールドにクラスの型の変数を作り、クラスのオブジェクトを生成して変数に入れてそのオブジェクトのメソッドを呼び出すことでそのクラスを使えます。
まとめ
Playerを動かせるようになってなにか作ってる感が出てきました。次では敵を作ります。
最終更新:2016年12月21日 20:08