どうもー!マミィです!
フリーランスプログラマーをしながら、「スクラッチプログラミング」・「マインクラフト」の真似したいと思う、役に立つ情報を中心に発信しています!
![](https://programommy.com/wp-content/uploads/2022/03/1646526332916-1-e1654386863580-150x150.jpg)
スクラッチで、ブロックの上に乗りたいんだけど、すり抜けないで作る方法が知りたい!
![マミィ](https://programommy.com/wp-content/uploads/2022/03/cropped-2975bc8c4727d8f51ee97d791aabd406-e1654387018377-150x150.jpg)
キャラクターとブロックのy座標をうまく使うことで、上に乗ることができます!
![](https://programommy.com/wp-content/uploads/2022/07/75d800422a2ee29536bb15f21dd303f4.gif)
ブロックをすり抜けないで、ブロックを壊したり、壊せないブロックの作り方を前回解説しました!
ブロック系の続きで、ブロックに乗りたいですよね!!
色判定は使わず、座標を使って上に乗ったかを判定しています。
この記事の内容です。壊せないブロックの部分と同じ話も出てきます!
- キャラクターの「ジャンプ」とブロックを「すり抜けない」仕組みの作り方
- ブロックの上に乗ったかどうかの判定をする方法
この記事を読むと、ジャンプしたときに、ブロックの上に乗り、歩いたりジャンプしたりすることができます!
今回作った作品です↓※ブロックを壊すときだけ音がでます。
上矢印キー:ジャンプ
左矢印キー:左に動く
右矢印キー:右に動く
キャラクターと背景は著作権フリー素材(CC0)を使っています。
素材のDL方法と取り込み方が知りたい人はこちらを参考にしてください。
最近購入した富士通のPCがとても快適だったので、おすすめします↓
※2022年11月にAmazonで買いました。ゲームの録画もワンタッチでできます。
スクラッチも教育版マインクラフトもこのパソコンで作ってます。
キャラクターの「ジャンプ」とブロックを「すり抜けない」仕組みの作り方
前回と同じ解説ですが、基本の動きなのでおさらいします!
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-16T090727.755.png)
![](https://programommy.com/wp-content/uploads/2022/07/aa9347ad2f16c3374f530cf081bcceb4.png)
![](https://programommy.com/wp-content/uploads/2022/07/c4ec840a35ddac698058e9e2e3e02cbe.png)
今回使うスプライトは、キャラクターと、ブロック、背景画像のみ。
※ブロックは同じ画像を使いまわしています。
![](https://programommy.com/wp-content/uploads/2022/07/1-idle.gif)
![](https://programommy.com/wp-content/uploads/2022/07/fragile-block-preview.gif)
![](https://programommy.com/wp-content/uploads/2022/07/11.png)
※上のGIFファイルを、画像右クリックで保存できます。
動く画像(GIF)をスクラッチに取り込むと、1枚ずつ動きのコスチュームが自動で分かれます。
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-16T105345.231.png)
各スプライトの名前を、boy(キャラクター)、block-brown(茶色ブロック)、block-blue(青色ブロック)、block-purple(紫色ブロック)と名前をつけています。
キャラクターを地面の位置まで下にずっと動かす
①boyが画面の下に行かないように、地面の位置を決めておく
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-16T103818.259.png)
boyの位置をまず決めて、「地面のy座標」にboyの「y座標」を入れます。
ここでは、-130が入ります。
②決めた地面の位置より小さくなるまでキャラクターを下に移動させる
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-16T105035.407-1024x433.png)
地面のy座標の位置まで、常にキャラクターを下に動かしています。
3つのブロック全部に触れていないときは以下のことをしています。
- 変数「ブロックに触れた」を0にして、ブロックに触れているのかどうかを変数に保存。
- キャラクターが地面の位置に下がってくるまでy座標を-5ずつ変えていく。
これで、常に、ブロックに触れているのかをチェックして、地面の位置まで下がってくる重力の動きが再現できます。
ジャンプのときは、上に動かす量を大きくする
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-16T195159.144.png)
ジャンプをするように、上に動かしたいときは、下に降りて来る移動量の2倍(y座標を10ずつ変える)で増やせば上に向かっていきます。
1回の移動量は下に移動する量の2倍で繰り返す回数を多くすることで、ジャンプできる高さが変わります。
ブロックをすり抜けないようにするには、触れたときに上に動かすのをやめる
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-16T195806.104.png)
「ブロックに触れた」の変数の意味は、以下になります。
- ブロックに触れた=0:触れていない
- ブロックに触れた=1:触れた
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-16T200241.055.png)
ブロックに触れてないときにだけ、上に移動させています。
下からキャラクターがブロックに当たったときには、上に移動しないので、すり抜けることはありません。
ブロックの上に乗ったかどうかの判定をする方法
![](https://programommy.com/wp-content/uploads/2022/07/75d800422a2ee29536bb15f21dd303f4.gif)
キャラクターを常に下に移動していますが、ブロックの上にのったかどうかを判断して、ブロックの上に乗っていないときだけ、下に移動しています。
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-17T131444.577.png)
この「上にのった」を0以外にすれば、下に移動しません。
ブロックに乗ったようにみせるために、ブロックに触れた判定をして、「上にのった」を1にします。
ブロックとの判定する位置を判定:y座標を利用
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-17T130334.790.png)
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-17T130357.676.png)
茶色ブロックでの設定です。
- 茶色ブロックを画面の中心に配置する
- 茶色ブロックの高さ(すべてのスプライトで使える変数)に、茶色のブロックの「y座標」をいれておく
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-18T071250.539.png)
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-18T071226.350.png)
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-18T073253.557.png)
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-18T072755.363.png)
上に乗ったように見せるために、判定位置を少し上に調整します。
茶色のブロックの高さ(y座標)+30
こうすることで、キャラクターがブロックが上に当たったのか、下から当たったのかが判断つくようになります。
![マミィ](https://programommy.com/wp-content/uploads/2022/03/cropped-2975bc8c4727d8f51ee97d791aabd406-e1654387018377-150x150.jpg)
スプライトの大きさで、「30」の数字が変わってくるので、自分で使うものの大きさに合わせて変えてくださいね!
青色ブロックも、紫色ブロックにも同じ上にのった判定をいれています。
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-17T130614.213.png)
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-17T130831.557.png)
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-17T130731.094.png)
![](https://programommy.com/wp-content/uploads/2022/07/Screenshot-2022-07-17T130644.319.png)
まとめ:ブロックの上に乗る方法
以上、ブロックに乗る方法を解説しました!
やることのポイントをまとめると・・・
- ブロックのy座標を判定する変数にとっておく
- 変数「上にのった」が「0」の間は、キャラクターを下に移動させる
- キャラクターとブロックが触れつつ、ブロックの上部に当たったときに「上にのった」かの判断の「1」にする
- 1になったときに、下に移動しないので、ブロックの上に乗っているようにみせる
実際にコードを見たほうがいいという人は、スクラッチページを参考にしてください。
![マミィ](https://programommy.com/wp-content/uploads/2022/03/887784e326d33cdb30f13acf3e61c111-e1654001514695-150x150.jpg)
障害物を判定できると、ゲームに応用できますね!
楽しんでプログラミングしましょう〜
ブロックを下から当たった時にブロックを壊したり、壊せないブロックを作る方法は別の記事にしています。