見出し画像

ターゲットへ放て!弓矢シューティングゲームを作ろう!クミタテ式プログラミングドリル(JavaScript / p5js)

この教材は期間限定で無料公開している教材です。

 - 矢の動きを再現

今回作るのは、弓矢の物理挙動を使ったシューティングゲームです。マウスで方向を定めて弓を放ちます。角度から座標を算出する三角関数とは違い、座標から角度を算出する逆三角関数(アークタンジェント)が学べます。

画像15

デモアプリはこちらから。https://openprocessing.org/sketch/1343834

- クミタテ式プログラミングドリルとは?

クミタテ式は一言で言えば、Scratchの設計図を使ってProcessingフレームワークのプログラムコーディングを学ぶ学習方法です。
初めてクミタテ式を学習する方は、はじめの一歩をご覧ください。チュートリアルや導入方法を紹介しています。

- 動画を見ながら学習する

動画で実況プログラミングしながら解説しています。このテキストを見ながら動画と一緒に学ぶのがおすすめです。


■[ここからスタート!]setupで画面を表示する

再生時に最初の1回だけ実行するsetupの枠組みを使って、画面の大きさを決める初期設定をしてあげましょう。

画像1

■drawで背景の色を変える

drawの枠組みを使って、1秒間に60回、停止するまでずっと実行されるようにしましょう。

画像2

■プレイヤーとなる四角形を表示する

背景に色はつけられましたか?
続いて、四角形を1つ表示します。この四角形をプレイヤーとします。

画像3

■変数を使ってプレイヤーを表示する

四角形を表示できましたか?
続いて、変数を使ってプレイヤーを表示します。

画像4

■矢尻(矢の先端)を、とりあえず円で表示する

変数の使い方はわかりましたか?
続いて、矢を表示します。ですが、ここではわかりやすくするため矢の先端を円で表現します。
矢の位置情報もa_x、a_yといった変数で管理します。

画像5

■矢の進行方向を変数で管理する

矢は動作しましたか?
続いて矢の進行方向も変数、a_dx、a_dyで管理するようにします。

画像6

■矢が、減速して落下するようにする

矢の進行方向を変数で管理できましたか?
続いて矢の動きをリアルにしましょう。徐々に減速し、落下するようにします。

画像7

■矢の本体を、線で表現する

矢の物理挙動はできましたか?
続いて、矢の本体を線で表現してみましょう。

画像8

■矢を、とりあえず45度に、傾ける

矢の本体は表示できましたか?
ただ、今のままだと矢っぽい動きをしていませんね。傾きがないためです。
続いて、とりあえず矢を45度傾けてみましょう。

画像9

■矢を、進行方向に回転させる

矢の傾きはできましたか?
45度に傾いたままでも変なので、続いて、矢尻の動きに合わせて本体を回転するようにしましょう。
ここで登場するのが逆三角関数と呼ばれるものです。atan2はアークタンジェントと呼び、進行方向などからラジアン値で角度を算出できます。
また、アークタンジェントは引数がx, yではなく、y,xな点に注意して下さい。

画像10

■マウスクリックで、とりあえず45度の方向に、矢を放つ

逆三角関数による矢の回転はできましたか?
続いて、マウスクリックで45度の方向に矢を放つようにしましょう。
進行方向の変数であるa_dx、a_dyは三角関数sin,cosから算出しています。

画像11

■マウスの方向に向かって、矢を放つ

45度の方向に矢を放てましたか?
続いて、マウスの方向に向けて矢を放つようにします。
マウスの位置がわかっているけど角度がわからない、そんなときもやはり逆三角関数が使えます。

画像12

クミタテ式の設計図はここまでです。以下の応用課題は自分で考えてプログラミングしてみましょう。

■応用課題1. プレイヤーに弓を持たせよう

arc命令を使うことで、孤を描くことができます。
この孤を弓と見立てて表現してみましょう。
とりあえず、右に向かって弓を構えさせましょう。

arcの使い方は公式のリファレンスを見るとよいでしょう。
https://processing.org/reference/arc_.html

画像13

■応用課題2. マウスの方向に弓を傾けよう

プレイヤーが、マウスの方向に弓を傾けるようにしましょう。
方向がわかっているけど角度がわからない。そんなときはどんな関数を使えばよかったでしょうか?

画像14


この記事が気に入ったらサポートをしてみませんか?