スクラッチプログラミング - キャラクターをうごかす|ジャンプ・かべキック

ジャンプや左右(さゆう)にうごかす方法(ほうほう)

今回(こんかい)は、Scratch (スクラッチ)でキャラクターを操作(そうさ)する方法(ほうほう)について解説(かいせつ)します。

ジャンプや左右(さゆう)にうごかすことはもちろん、壁(かべ)をキックしてのぼれるようにします。プラットフォーマーなどをつくるときに利用(りよう)できるスクリプトなので、ぜひマスターしていろいろなゲームをつくれるようになりましょう。

サンプルプロジェクト

最初(さいしょ)に、下(した)にあるサンプルプロジェクトで、キャラクターのうごきを確認(かくにん)しておきましょう。

Scratch|キャラクターをうごかすサンプルGIF

うごくはやさを変数(へんすう)できめる

キャラクターをうごかすときは、一定(いってい)のはやさではなく、だんだんはやくなったり、だんだんゆっくりになったりするようにします。そのためにつかう変数(へんすう)を用意(ようい)しましょう。

  1. 左右(さゆう)のはやさをきめる変数(へんすう) x速度(そくど)
  2. 上下(じょうげ)のはやさをきめる変数(へんすう) y速度(そくど)
  3. キャラクターの最初(さいしょ)の位置(いち)
さいしょのせってい

このあとつくっていくスクリプトは、どんなうごきをあらわすのかをわかりやすくするために、うごきの種類(しゅるい)ごとにブロック定義(ていぎ)でまとめていきます。

ブロック定義(ていぎ)については、以下(いか)の記事(きじ)で紹介(しょうかい)しているので参考(さんこう)にしてください。

スクラッチプログラミング -「ブロックていぎ」とは?じぶんでつくるブロック
プログラミングにつかうブロックを、あたらしくつくってみましょう。Scratchにはたくさんのブロックが用意(ようい)されていますね。でもそれだけでなく、じぶんでブロックをつくることもできますよ。

重力(じゅうりょく)

ブロック定義(ていぎ)でつくる1つめのブロックは、重力(じゅうりょく) です。

キャラクターに重力(じゅうりょく)をあたえると、次(つぎ)のようなメリットがあります。

  • ジャンプのうごきがよりリアルになる
  • たかい所(ところ)からひくい所(ところ)へ自動的(じどうてき)におちるようになる

定義(ていぎ) 重力(じゅうりょく) の下(した)に次(つぎ)のようにブロックをつなげて、下(した)へうごく量(りょう)がだんだんふえるようにしましょう。

へんすうのあたいをすこしずつかえて、たてへうごくりょうもへんすうにおうじてかえる

たとえば、この変数(へんすう)の値(あたい)を -0.5 にすると落下速度(らっかそくど)はおそくなり、-1.3 のようにするとよりはやく下(した)へおちるようになります。

地面(じめん)か天井(てんじょう)にあたる

ブロック定義(ていぎ)でつくる2つめのブロックは、地面(じめん)か天井(てんじょう)にあたる です。このブロックは、「画面(がめん)を再描画(さいびょうが)せずに実行(じっこう)する」にチェックをいれてつくってください。

ブロックをつくるがめん

キャラクターが「地面(じめん)にあたったのか」または「天井(てんじょう)にあたったのか」、2つの場合(ばあい)で処理(しょり)をわけていきましょう。

最初(さいしょ)に、プラットフォームにふれたかどうかを判定(はんてい)します。

もしプラットフォームのいろにふれたなら

次(つぎ)は、地面(じめん)にあたるうごきです。重力(じゅうりょく)でおちてきたときに、下(した)にあるプラットフォームにうまらないようにしましょう。

  1. 下(した)へうごいているときの y速度(そくど) の値(あたい)はマイナスです。
  2. -1 をかけて、下(した)へのうごきと逆方向(ぎゃくほうこう)へうごかします。
じめんではねかえる

つづいて、天井(てんじょう)にあたるうごきです。ジャンプしたときに、上(うえ)にあるプラットフォームをとおりぬけないようにしましょう。

  1. 上(うえ)へうごいているときの y速度(そくど) の値(あたい)はプラスです。
  2. 天井(てんじょう)にふれない位置(いち)まですこしずつ下(した)へうごかします。
てんじょうではねかえる

yざひょうを -1 ずつかえる をつかってすこしずつ下(した)へうごかす理由(りゆう)は、天井(てんじょう)の下端(したはし)の位置(いち)ピッタリではねかえるようにみせるためです。また、このブロックを画面(がめん)を再描画(さいびょうが)せずに実行(じっこう)する理由(りゆう)は、このすこしずつのうごきを一瞬(いっしゅん)でおわらせるためです。

最後(さいご)に、上下(じょうげ)のはやさをリセットしましょう。

yそくどを0にする

地面(じめん)でバウンドさせる?ピタッととめる?

さて、このスクリプトでは、上(うえ)からおちてきたときに、地面(じめん)ですこしバウンドするようになっています。地面(じめん)にピタッととまるようにしたい場合(ばあい)は、天井(てんじょう)にあたるときとおなじようにブロックをくみあわせるといいですよ。

じめんでピタッととまるスクリプト

ジャンプ

ブロック定義(ていぎ)でつくる3つめのブロックは、ジャンプ です。

  1. うわむき矢印(やじるし)キーでジャンプさせます。また、地面(じめん)にいるときだけジャンプできるようにします。
  2. 上下(じょうげ)のはやさ y速度(そくど) を一気(いっき)にたくさんふやして、上(うえ)へうごかします。
キーがおされたときにプラットフォームにふれているなら、yそくどを15にする

じつは、キャラクターは地面(じめん)にいるときに、地面(じめん)からすこしういた状態(じょうたい)になっています。そのため、このままだと、うわむき矢印(やじるし)キーをおしてもジャンプすることができません。

なぜ地面(じめん)にふれていないのかというと、さきほどつくった 地面(じめん)か天井(てんじょう)にあたる で、地面(じめん)にふれたらはねかえるようにしているからです。

キャラクターが地面(じめん)にふれた状態(じょうたい)にするために、次(つぎ)のようにブロックを追加(ついか)してください。

yざひょうを-1ずつかえる、yざひょうを1ずつかえる

yざひょうを -1 ずつかえる で、キャラクターが地面(じめん)にふれます。そのときにうわむき矢印(やじるし)キーがおされるとジャンプします。うわむき矢印(やじるし)キーがおされなかった場合(ばあい)、yざひょうを -1 ずつかえるyざひょうを 1 ずつかえる が連続(れんぞく)で実行(じっこう)されるので、キャラクターが1ずつ座標(ざひょう)をかえるようすはみえません。

なぜ地面(じめん)からすこしうかせておくのか?

上(うえ)のスクリプトでもわかるように、yざひょうを -1 ずつかえる で地面(じめん)にふれたあと、yざひょうを 1 ずつかえる をつかってふたたび地面(じめん)からはなれるようにしています。

なぜキャラクターを地面(じめん)からすこしうかせておくのかというと、今回(こんかい)はプラットフォームにたいする衝突判定(しょうとつはんてい)をすべておなじ色(いろ)でおこなうからです。地面(じめん)にふれた状態(じょうたい)にしてしまうと、おなじ色(いろ)である天井(てんじょう)や壁(かべ)にもふれていることになり、うまくうごかすことができません。

うごきをたしかめよう

では、定義(ていぎ)したブロックをつなげて、ここまでのうごきを確認(かくにん)してみましょう。うわむき矢印(やじるし)キーをおすとジャンプして、上(うえ)にあるプラットフォームにぶつかります。

キャラクターをじょうげにうごかすスクリプト

ここまでは、上下(じょうげ)のうごきのスクリプトをつくりました。次(つぎ)のセクションからは、左右(さゆう)のうごきをつくっていきます。

左右(さゆう)へうごかす

ブロック定義(ていぎ)でつくる4つめのブロックは、左右(さゆう)へうごかす です。

左右(さゆう)の矢印(やじるし)キーをおしたとき、だんだんはやく横方向(よこほうこう)へうごくようにします。

へんすうのあたいをすこしずつかえて、よこへうごくりょうもへんすうにおうじてかえる

キーをはなしたとき、すぐにとまるのではなく、だんだんゆっくりとまるようにしましょう。

へんすうのあたいに0.9をかける

壁(かべ)キック/壁(かべ)でとまる

ブロック定義(ていぎ)でつくる5つめのブロックは、壁(かべ)キック/壁(かべ)でとまる です。

まずは、キャラクターが壁(かべ)をとおりぬけないようにようにします。壁(かべ)にあたったとき、左右(さゆう)のはやさ x速度(そくど)-1 をかけて逆方向(ぎゃくほうこう)へうごかします。

かべではねかえる

つづけて、壁(かべ)にあたったときに「壁(かべ)をキックしてのぼれるようにするのか」または「壁(かべ)でとまるようにするのか」、2つの場合(ばあい)で処理(しょり)をわけていきましょう。

「もし〜なら、でなければ」をついかする

最初(さいしょ)に、壁(かべ)キックです。うわむき矢印(やじるし)キーで壁(かべ)をのぼれるようにします。通常(つうじょう)のジャンプよりちいさくジャンプさせたいので、y速度(そくど) の値(あたい)はちいさめにしてください。

キーがおされたなら、へんすうyそくどを10にする

壁(かべ)をキックするために、「右側(みぎがわ)の壁(かべ)にあたっているのか」または「左側(ひだりがわ)の壁(かべ)にあたっているのか」で処理(しょり)をわけます。

「もし〜なら、でなければ」をついかする

右側(みぎがわ)の壁(かべ)にあたるときは、みぎむき矢印(やじるし)キーがおされて x速度(そくど) の値(あたい)がプラスになっているときです。x速度(そくど) をマイナスにして、壁(かべ)からはなれるようにしましょう。

xそくどが0よりおおきいなら、xそくどを-8にする

x速度(そくど) の値(あたい)がプラスでないときは、ひだりむき矢印(やじるし)キーがおされているときです。x速度(そくど) をプラスにして、左側(ひだりがわ)の壁(かべ)からはなれるようにします。

でなければ、xそくどを8にする

ここまでで壁(かべ)キックのスクリプトができました。キックして壁(かべ)からどれだけはなれるか、x速度(そくど) の値(あたい)はおこのみです。ただ、キック力(りょく)がつよすぎると、重力(じゅうりょく)で下(した)へひっぱられて壁(かべ)をなかなかのぼれなくなるので注意(ちゅうい)してくださいね。

最後(さいご)に、壁(かべ)でとまる場合(ばあい)です。壁(かべ)にあたったときにうわむき矢印(やじるし)キーがおされていないときは、x速度(そくど)0 にして壁(かべ)でとまるようにしましょう。

さゆうにうごくいきおいをリセットする

スクリプト完成(かんせい)

つくったブロックをすべてつなげて、キャラクターをうごかすスクリプトが完成(かんせい)です。

ていぎしたブロックすべてを「ずっと」のなかにいれる
じょうげのうごき
さゆうのうごき

Scratch の Pyxofy ページへいって、実際(じっさい)にキャラクターをうごかしてみてくださいね。Scratch ジャンプ・壁キック by Pyxofy

「きょうからはじめるスクラッチプログラミング入門」Pyxofy (著)

Pyxofy が Scratch の基本をまとめた電子書籍を出版しました。
Kindle・Apple Books からご購入ください。

詳細はこちら

まとめ

ここまで、Scratch でキャラクターを操作(そうさ)する方法(ほうほう)について解説(かいせつ)してきました。

縦(たて)のうごきにも横(よこ)のうごきにも変数(へんすう)をつかったので、キャラクターはなめらかにうごきます。基本(きほん)のうごきであるジャンプや横(よこ)移動(いどう)だけでなく、壁(かべ)をキックしてのぼれるようにしました。このスクリプトを応用(おうよう)して、いろいろなゲームをつくってみてくださいね。

最後まで読んでいただき、ありがとうございます。この記事をシェアしてくれると嬉しいです!

SNS で Pyxofy とつながりましょう! LinkedInThreadsBlueskyMastodon X (Twitter) @pyxofyFacebook

関連記事

Scratch - Pyxofy
Scratch 3.0の使い方を、プログラミング初心者や子どもにも分かりやすく紹介しています。
JavaScript - Pyxofy
プログラミング言語のJavaScriptについて、初心者向けに解説しています。
CSS Art
Articles for creating CSS Art.
CSS Animation
Articles for creating CSS Animation.