p5.playをやる記事#06_マウスに反応させる

[前回の記事](https://qiita.com/sdkfz181tiger/items/bfd4e59491379fd57fd9) | [次回の記事](https://qiita.com/sdkfz181tiger/items/83685adaeaa426cea7bd)

p5.playの使い方を解説しております。
[第1回の記事](https://qiita.com/sdkfz181tiger/items/c424b0777f7d7fe2203a)はこちらにありますのでご参照ください。

## マウスに反応させる

今回はマウスの動きや動作に合わせてスプライトを操作するお話です。
スプライトにはあらかじめその機能もしっかり備わっています。
(ありがたや!!)

マウスに関するイベントとしてよく使う機能は下記の通りです。

1. マウスが重なった時
2. マウスが離れた時
3. マウスでクリック(押した)時
4. マウスでクリック(離した)時

以下、順番に見ていきましょう。

## マウスが重なった時
マウスがスプライトに重なった時に何かを実行したい場合は、
onMouseOverに関数を定義します。

```JavaScript
スプライト.onMouseOver = (event)=>{
   // やりたい処理
}
```

## マウスが離れた時
マウスがスプライトにから離れた時に何かを実行したい場合は、
onMouseOutに関数を定義します。
関数にある"event"引数には、対象のスプライト自身を示すオブジェクトが格納されています。

```JavaScript
スプライト.onMouseOut = (event)=>{
   // やりたい処理
}
```

## マウスでクリック(押した)時
マウスでスプライトをクリック(押した)時に何かを実行したい場合は、
onMousePressedに関数を定義します。
関数にある"event"引数には、対象のスプライト自身を示すオブジェクトが格納されています。

```JavaScript
スプライト.onMousePressed = (event)=>{
   // やりたい処理
}
```

## マウスでクリック(離した)時
マウスでスプライトをクリック(離した)時に何かを実行したい場合は、
onMouseReleasedに関数を定義します。
関数にある"event"引数には、対象のスプライト自身を示すオブジェクトが格納されています。

```JavaScript
スプライト.onMouseReleased = (event)=>{
   // やりたい処理
}
```

## サンプルを作ってみる

実際にonMouseOver、onMouseOutを使ってサンプルを作ってみましょう。

使っているタヌキの画像を置いておきますね。

![t_tanu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9823/8fdf01a9-940d-e115-6688-e9ca9cde2cf3.png)

### 大きさが変わるサンプル
次のコードは、マウスが重なった時は大きくなり、
離れた時に元の大きさに戻るサンプルです。

```JavaScript
let img;

function preload() {
	img = loadImage("t_tanu.png");
}

function setup() {
	createCanvas(windowWidth, windowHeight);
	frameRate(32);
	noSmooth();
	// スプライト
	let spr = createSprite(width/2, height/2);
	spr.addImage(img);
	// マウスが重なった時
	spr.onMouseOver = (event)=>{
		event.scale = 2;// 2倍の大きさになります
	}
	// マウスが離れた時
	spr.onMouseOut = (event)=>{
		event.scale = 1;// 元の大きさに戻ります
	}
}

function draw() {
	background(33);
	drawSprites();
}
```

マウスが重なると2倍になり、離れると元の大きさ(1倍)になります。(お見事!!)
余裕があったら、onMousePressedやonMouseReleasedも試してみましょう。

![Screen-Recording-2021-08-05-at-15.17.00.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9823/fa444086-c06d-a3fe-117a-d4cc61d6f08c.gif)

### クリックするとどこかに行っちゃうサンプル
次のコードは、クリックするとどこかへ行ってしまうサンプルです。

```JavaScript
let img;

function preload() {
	img = loadImage("t_tanu.png");
}

function setup() {
	createCanvas(windowWidth, windowHeight);
	frameRate(32);
	noSmooth();
	// スプライト
	let spr = createSprite(width/2, height/2);
	spr.addImage(img);
	// マウスでクリックした時(押した時)
	spr.onMousePressed = (event)=>{
		event.scale = 0.5;// 半分の大きさになります
	}
	// マウスでクリックした時(離した時)
	spr.onMouseReleased = (event)=>{
		event.scale = 1;// 元の大きさになります
		event.position.x = random(width);// ランダムで何処かへ!!
		event.position.y = random(height);
	}
}

function draw() {
	background(33);
	drawSprites();
}
```

絶対に捕まえることは出来ません!!
(座標がランダムで変わるだけですね)

![out.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9823/4acbdef6-06f8-2406-0206-0fe888e1abbd.gif)

次回も引き続き、スプライトについてのお話になります。

[前回の記事](https://qiita.com/sdkfz181tiger/items/bfd4e59491379fd57fd9) | [次回の記事](https://qiita.com/sdkfz181tiger/items/83685adaeaa426cea7bd)

## おまけ動画(こちらもよろしくお願いします)

<iframe width="560" height="315" src="https://www.youtube.com/embed/bHtS5tgRmFY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>