![スーパーマリオ風 頭突きしてブロックを壊す方法_m](https://tsunekichiblog.com/wp-content/uploads/2020/12/aeb70c5a66374a1c562305fde13cd971-1024x538.jpg)
スーパーマリオのようなゲームを作りたいと思った時に最初に考えることは、キャラクターを「横に走らせる」「ジャンプさせる」「ブロックに乗る」「ブロックを壊す」あたりのアクションではないでしょうか?
今回はそのうちの「ブロックを壊す」方法について紹介します。
この記事を読んでいただくと、スーパーマリオ風にキャラクターが頭突きしてブロックを壊すスクリプトの作り方が分かります。
スクリプトの作り方
完成した動き
ネコがブロックに頭突きをすると、ブロックが割れて4つの破片が飛び散って、回転しながら地面まで落下する動きにしています。
あまり複雑にすると本題であるブロックを壊す部分のプログラムが分かりにくくなるので、当たり判定は単純に「ネコとブロックが触れたら」という条件にしています。
実際のゲームに組み込む場合は「ブロックの底辺にぶつかったら壊す」のような細かい条件にした方がリアルな動きになると思います。
![スーパーマリオ風 頭突きしてブロックを壊す方法-完成-GIFアニメ](https://tsunekichiblog.com/wp-content/uploads/2020/12/7d4be18b847cd4945f88ed16af3350e7.gif)
完成したスクリプト
完成したスクリプトの全体です。スプライトは「ネコ」「ブロック」「ブロック破片」「背景」の4つです。
【スプライト】
ネコ ブロック ブロック破片 背景
【ネコのスクリプト】
- Xv:すべてのスプライト用
- Yv:すべてのスプライト用
![](https://tsunekichiblog.com/wp-content/uploads/2021/10/image-161.png)
【ブロックのスクリプト】
- ブロックX:すべてのスプライト用
- ブロックY:すべてのスプライト用
![](https://tsunekichiblog.com/wp-content/uploads/2021/10/image-153.png)
【ブロック破片のスクリプト】
- Y移動量:すべてのスプライト用
- 破片:このスプライトのみ
![](https://tsunekichiblog.com/wp-content/uploads/2021/10/image-154.png)
【背景のスクリプト】
背景のスクリプトは、スタート直後の座標を決める部分だけです。
![](https://tsunekichiblog.com/wp-content/uploads/2021/10/image-130.png)
スクリプトの説明
プログラムを作っていく中でポイントとなる部分を説明します。(ネコのスプライトと背景スプライトの説明は省略します)
ポイント①:クローンされたブロックの中で当たり判定をおこなう
最初にステージ上にブロックスプライトのクローンを3個つくります。
![](https://tsunekichiblog.com/wp-content/uploads/2021/10/image-157.png)
そのクローンされたブロックでは、ずっと「ネコに触れたかどうか」をチェックし続けています。
そして、もしネコに触れたら「ブロックX」変数に触れたブロックのX座標を入れ、「ブロックY」変数に触れたブロックのY座標を入れています。
そのあと「破片飛び散るメッセージ」を送り、ブロックスプライト本体は隠してしまいます。
【ブロックのスクリプト】
![](https://tsunekichiblog.com/wp-content/uploads/2021/10/image-156.png)
ポイント②:ブロック破片がメッセージを受け取ったらクローンをつくる
「ブロック破片」スプライトは、「ブロック」スプライトからメッセージを受け取るとクローンをつくります。
このとき「破片」変数は「このスプライトのみ」でつくっているので、クローンごとに別々の値を持たせることができます。
ここでは「破片」変数に1~4の値を持たせてどのクローンなのか識別できるようにしています。
![](https://tsunekichiblog.com/wp-content/uploads/2021/10/image-159.png)
クローンごとに別々の変数の値を持たせて識別する方法については、こちらの記事で詳しく説明しています。↓↓↓
ポイント③:ブロック破片の初期座標と落下の動きをつくる
「ブロック破片」スプライトのクローンが作られたら、それが何番目のクローンかによって初期表示させる座標と落下するときのX座標の移動量を変化させます。
そのために「もし(破片変数)=?なら」という条件をつかって、プログラムを分岐させています。
![](https://tsunekichiblog.com/wp-content/uploads/2021/10/image-163.png)
ここまでのポイントを押さえてスクリプトを組むことが出来たら、スーパーマリオ風の頭突きしてブロックを壊すプログラムは完成です!
失敗しやすいポイント
「破片」変数をつくるときに「すべてのスプライト用」でつくってしまうと上手く動きません。
失敗パターンは下の画像(アニメーション)のように4つの破片が同じ方向に動いてしまいます。
これは変数が共有されてしまっているため、すべての破片が最後の値(つまり破片変数=4)として扱われてしまったためです。
![スーパーマリオ風 頭突きしてブロックを壊す方法-失敗-GIFアニメ](https://tsunekichiblog.com/wp-content/uploads/2020/12/137a626aab6a6217688550b37aaa4bb4.gif)
応用編
上で紹介したプログラムを改良して、下から突き上げた時だけブロックが壊れるようにしてみました。ブロックの横にぶつかったときは跳ね返され、ブロックの上に乗れるようになりました。
まだ不完全な部分があるのでさらに研究してみたいと思います。
※左右の矢印キーで左右移動、上矢印キーでジャンプします。
![スーパーマリオ風 頭突きしてブロックを壊す方法-応用-GIFアニメ](https://tsunekichiblog.com/wp-content/uploads/2020/12/e869e034f335313aa1aded89fcfd2a01.gif)
まとめ
さいごに、今回の記事で説明した『スーパーマリオ風にキャラクターが頭突きしてブロックを壊すスクリプトの作り方』のポイントをまとめます。
- ポイント①:クローンされたブロックの中で当たり判定をおこなう
- ポイント②:ブロック破片がメッセージを受け取ったらクローンをつくる
- ポイント③:ブロック破片の初期座標と落下の動きをつくる
どうでしたか?上手く再現できたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)