DJGL-マウス入力

「DJGL-マウス入力」の編集履歴(バックアップ)一覧に戻る

DJGL-マウス入力 - (2016/10/06 (木) 10:19:54) のソース

*マウス入力
----
マウス入力について解説します。マウスでの入力は直感的なのでわかりやすいですが、作る側としては座標管理(どの位置でクリックされたかとか)をするのがちょっと面倒です。

**ソースコード
----
いつも通り以下のコードを書き写してください。xとyを間違えないように。
//この{{}}内にソースコードを貼り付ければ行番号とJavaのハイライトが付きます
#highlight(linenumber,java){{
//------------
//変更点開始
/////////////////
import densan.s.game.input.MouseInput;
/////////////////
//変更点終了
//------------
 
import densan.s.game.input.KeyInput;
 
import java.awt.event.KeyEvent;
import java.awt.Image;
 
import densan.s.game.image.ImageLoader;
 
import java.awt.Color;
 
import densan.s.game.drawing.Drawer;
import densan.s.game.manager.GameManager;
import densan.s.game.manager.Updatable;
 
 
public class TestGame implements Updatable {
 
	//------------
	//変更点開始
	/////////////////
	//マウスの各座標
	private int mx, my,cx,cy,rx, ry;
	//クリックされているか
	private boolean isClick;
 
	/////////////////
	//変更点終了
	//------------
	//初期化
	public TestGame() {
		//------------
		//変更点開始
		/////////////////
		//初期化
		mx = 0;
		my = 0;
		cx = 0;
		cy = 0;
		rx = 0;
		ry = 0;
		isClick = false;
 
		/////////////////
		//変更点終了
		//------------
	}
	//更新
		@Override
		public void update() {
			//------------
			//変更点開始
			/////////////////
			//マウスの座標
			mx = MouseInput.getMouseX();
			my = MouseInput.getMouseY();
			//クリックされた座標
			cx = MouseInput.getClickX();
			cy = MouseInput.getClickY();
			//クリックが離された座標
			rx = MouseInput.getReleaseX();
			ry = MouseInput.getReleaseY();
			//クリックされたか
			isClick = MouseInput.isLeftClicking();
			//
			/////////////////
			//変更点終了
			//------------
	 
		}
	//描画
	@Override
	public void draw(Drawer d) {
		//------------
		//変更点開始
		/////////////////
		d.setFontSize(30);
		//クリックされてるか色変える
		if (isClick) {
			d.setColor(Color.RED);
		}else {
			d.setColor(Color.BLACK);
		}
		d.drawStringCenter("クリックしてね", 400, 300);
 
		//マウスがある座標に大きい円
		d.setColor(Color.BLUE);
		d.fillCircle(mx, my, 50);
		//クリックされた座標に中くらいの円
		d.setColor(Color.GREEN);
		d.fillCircle(cx, cy, 40);
		//クリックが離された座標に小さい円
		d.setColor(Color.RED);
		d.fillCircle(rx, ry, 30);
		/////////////////
		//変更点終了
		//------------
 
	}
	
	//初期化
	public static void main(String[] args) {
		//ゲームを管理するクラスを取得
		GameManager gm = GameManager.getInstance();
		//このメソッドでウインドウを表示する
		//引数はそれぞれ(幅, 高さ, タイトルバーに表示する文字)
		gm.createFrame(800, 600, "テストゲーム");
		//更新と描画を担うオブジェクトを設定
		gm.setUpdatable(new TestGame());
	}
 
}
 

}}

このコードを実行するとまずは以下のようになります。
//「画像」と書かれているところにアップロードした画像のファイル名を入れれば画像が表示されます。
#ref(マウス始め.png)
まだクリックしていない状態では緑と赤の円は左上(0,0)にあります。どこかをクリックすると以下のようにすべての円が一箇所に集まります。
#ref(マウスワンクリック.png,,width=400,height=300)
クリックしている間は以下のように文字が赤くなります。
#ref(マウス赤文字.png,,width=400,height=300)
クリックしたままドラッグして離すと、緑の円がドラッグの始点に、赤の円がドラッグの終点になります。
#ref(マウスドラッグ.png,,width=400,height=300)
ドラッグした後クリックせずにマウスを動かすと3つの円がばらばらになります。
#ref(マウスばらばら.png,,width=400,height=300)

**解説
----
ソースコードの解説です。ちょっと要素が多いです。

-4行目はインポート文。DJGLのマウス入力扱うクラスをインポートしてる。
-29,31行目はフィールドの宣言。コメントそのまま。
-42~48行目はフィールドの初期化。
-62〜66行目ではの値によって色を


**まとめ
----