アクションゲームにおいてメインキャラクター(主人公)の攻撃パターンはこれまで『パンチ』だけでしたが、1パターンでは面白くないのでいくつか攻撃パターンを増やしてみたいと思います。
そこで今回は、飛び道具を中心とした武器を敵に向かって投げつける感じのプログラムをつくっていきます。
以前の記事でゲーム中に取得したアイテムを複数持てるようにアイテムボックスに保管したり取り出したりするプログラムを紹介しましたが、そのときのプログラムと組み合わせるとアイテムボックスから取り出した武器で攻撃する感じのゲームがつくれます。
この記事を読んでいただくと、アクションゲームで武器(飛び道具)をつかって敵を攻撃するプログラミングの方法が分かります。
なお、この記事で使用しているスプライト(キャラクター・背景・オブジェクト・音声など)はすべてパブリックドメインの無料の素材をダウンロードして使用しています。
完成品
この章の内容をご自身のScratch環境に反映すれば、同じ動きを再現することができます。
完成した動き
「1・2・3・4」のいずれかの数字キーを押すと、武器がそれぞれ「パンチ・石・おの・ブーメラン」に切り替わります。※「パンチ」の場合は素手なので武器はありません。
スペースキーで敵を攻撃します。
武器はそれぞれの特性に応じた動きをします。
攻撃が敵に当たると、当たったことが分かるように爆発アニメーションを表示します。
使用したスプライト
スプライトは「キャラ1」「地面1」「背景1」「パンチ効果」「武器」「lion-2」の6つです。
アクションゲーム用の背景・キャラクター・アイテム等の画像や音声は、パブリックドメインである「スーパーパワーアセットパック(CC0)のprehistoric-platformer」を使っています。
「キャラ1・地面1・背景1」スプライトについては、こちらの記事の「使用したスプライト」の章で詳しく説明していますので参照してください。↓↓↓
【Scratch 3.0】アクションゲーム ジャンプと地面にめり込まないように着地する方法(Tips)
【パンチ効果のスプライト】
「パンチ効果」スプライトの詳細については、こちらの記事を参照してください。↓↓↓
【Scratch 3.0】アクションゲーム 敵にダメージを与える方法①【当たり判定】(Tips)
【武器のスプライト】
「武器」スプライトの画像は、スーパーパワーアセットパックの「prehistoric-platformer\items」フォルダ内にある「7.png」「14.png」「20.png」ファイルをコスチュームにアップロードして使用しています。また、「パンチ」コスチュームは小さな●をマウスで描いて用意しています。
【lion-2のスプライト】
「lion-2」スプライトの画像は、スーパーパワーアセットパックの「prehistoric-platformer\characters\playable」フォルダ内にある「lion-2.png」ファイルを使用しています。
このファイルは縦7個×横6個=計42個のキャラクター画像の集まりになっているので、「PL_ImageConstructor.exe」などのソフトで等間隔に分割した画像の1つをスプライトとしてアップロードしています。
完成したスクリプト
完成したスクリプトの全体です。
【キャラ1のスクリプト】
【地面1のスクリプト】
【背景1のスクリプト】
【パンチ効果のスクリプト】
【武器のスクリプト】
- θ(シータ):このスプライトのみ
【lion-2のスクリプト】
lion-2のスクリプトはありません。
スクリプトの作り方
ここからはプログラムを作っていく中でポイントとなる部分を説明します。
ポイント①:武器を選択する
「武器」スプライトには下の図のように4つのコスチュームを用意しています。
「パンチ」コスチュームは点を描いたものです。本来パンチは素手なので武器を持ちませんが、プログラム中で当たり判定を行っているので何かしら物体が必要です。そのため、目立たないように小さな点を描いています。
武器の選び方は、単純にキーボードの1~4のいずれかを押すとコスチュームが切り替わるようにしています。
- 1:パンチ
- 2:石
- 3:おの
- 4:ブーメラン
ポイント②:スペースキーで武器を発動させる
武器を発動させるためのブロックは、「キャラ1」のスクリプト側でスペースキーを押したときに行っている「攻撃」アニメーションの直後に配置します。
具体的な処理は「武器」スプライト側にまかせるので「キャラ1」スプライトでは「武器のクローンを作る」ブロックだけを置くようにします。
「武器」スプライト側では、「クローンされたとき」ブロックの下に武器の挙動をつくっていきます。
どんな武器を使ったとしても共通で行いたい動きとしては、「キャラ1」が攻撃をすると「攻撃」定義ブロックのアニメーション(パンチの動き)が動くのでその拳の先から武器がでるようにしたいと思います。
そのために「キャラ1へ行く」「(キャラ1の向き)度に向ける」「50歩動かす」ブロックで拳の先から武器が出るように位置を調整しています。
武器ごとに異なる動きは「武器を動かす」定義ブロックの中に処理をまとめていますので、これについては次節で説明します。
「~歩動かす」ブロックは、スプライトが向いている向きに向かって動かすことのできるブロックです。斜めに向いていれば斜めに動いてくれます。
ポイント③:武器の特性に合わせて動かす
武器の挙動は武器の種類によって異なるので、「武器を動かす」定義ブロックの中で場合分けして細かくつくっています。
石の場合
武器の種類が「石」の場合はシンプルです。
「(端に触れた)または(lion-2に触れた)まで繰り返す」という条件はあるものの、実際の動きは「5歩動かす」ブロックだけなので、要するに端にぶつかるか敵にぶつかるかするまでは、「キャラ1」が向いている方向に5歩ずつ動き続けるということになります。
おのの場合
武器が「おの」の場合、おのを回転させながら敵に向かって投げたいので「キャラ1」の向いている方向によって場合分けが必要になります。
そのため、「もし(向き>0)なら」と「もし(向き<0)なら」ブロックで条件分けて、同じブロックの組み合わせになるものを「おのを動かす」定義ブロックにまとめた上で、値が必要な部分については引数(ひきすう)として与えるようにしました。
「おのを動かす」定義ブロックは、引数(ひきすう)を3つ(x、歩、度)を与える必要があります。
- x:x軸に沿って動かす歩数
- 歩:おのを回転させるときに中心からずらす長さ
- 度:おのを1度に回転させる角度(回転スピードを調整する)
これが実行されると「おの」が「キャラ1」が向いている方向のx軸に沿って回転しながら動いていきます。
ブーメランの場合
武器が「ブーメラン」の場合、空中でだ円を描きながら自分の元に戻ってくるような軌道をさせたいと思います。
「おの」のときと同じように「キャラ1」の向いている方向によって場合分けが必要になります。
そのため、「もし(向き>0)なら」と「もし(向き<0)なら」ブロックで条件分けて、同じブロックの組み合わせになるものを「ブーメランを動かす」定義ブロックにまとめた上で、値が必要な部分については引数(ひきすう)として与えるようにしました。
「ブーメランを動かす」定義ブロックは、引数(ひきすう)を5つ(cos、sin、歩、度、θ)を与える必要があります。
- cos:三角関数でx軸に沿って動かす
- sin:三角関数でy軸に沿って動かす
- 歩:ブーメランを回転させるときに中心からずらす長さ
- 度:ブーメランを1度に回転させる角度(回転スピードを調整する)
- θ(シータ):三角関数で使う角度
これが実行されると「ブーメラン」が「キャラ1」が向いている方向に向かってブーメランを投げ、空中をだ円の形で旋回しながら自分の元に戻ってくる動きをします。
旋回の途中で敵に当たるとブーメランは消えます。
パンチの場合
武器が「パンチ」の場合、実際には武器をもたずに素手で攻撃するので何もありません。
ただし、ポイント④で説明する爆発アニメーションを発生させるときに当たり判定が必要となるため、「パンチ」コスチュームだけは用意しています。
ポイント④:敵に当たったら爆発アニメーションを表示する
最後に「武器」スプライトが敵に当たったら、爆発アニメーションを表示する部分を説明します。
ちなみに爆発アニメーションはこんなやつです。↓↓↓
「武器」スプライト側の「武器を動かす」定義ブロックの最後の部分に「もし(lion-2に触れた)なら」ブロックをつないで、その中に「(パンチ効果)のクローンを作る」ブロックを入れます。
爆発アニメーションの動きは「パンチ効果」スプライト側で作成します。
クローン作成の命令を受けたら「クローンされたとき」ブロックが動き出します。
武器が当たった瞬間やることは、まず敵のいる位置まで移動させます。その次に表示します。
つぎにコスチュームを素早く切り替えてアニメーション表示をしたら、最後にクローンを削除します。
ここまでのポイントを押さえれば、アクションゲームで武器(飛び道具)をつかって敵を攻撃するためのスクリプトを完成させることができると思います。
失敗しやすいポイント
失敗しやすいポイントはありません。
応用編
今回応用編は特にありません。
まとめ
さいごに、今回の記事で説明した『アクションゲームで武器(飛び道具)をつかって敵を攻撃するプログラミング』のポイントをまとめます。
- ポイント①:武器を選択する
- ポイント②:スペースキーで武器を発動させる(別のスプライトからクローン作成を指示)
- ポイント③:武器の特性に合わせて動かす(引数を持った定義ブロックを使用)
- ポイント④:敵に当たったら爆発アニメーションを表示する
今回紹介したブロックのかたまりを使えば、「武器」スプライトのコスチュームを変えるだけで色んな武器に入れ替えができますし、武器の種類に応じた動きも「もし~なら」ブロックを追加するだけで簡単に実現できると思います。試してみてください。
どうでしたか?上手く再現できたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)