この記事でできること
- 自分で考えてジャンプ機能をつくることができます。
- 擬似的な重力の表現ができます。
つくりかた
クエスト①
- プレイヤーが落ちるように見えるスクリプトをつくりましょう。
仕様
- スタートしたときにプレイヤーは空中にいる(x座標とy座標を指定する)
- プレイヤーは、y座標に-10ずつ変える
動作確認
答え合わせ
クエスト②に向けて
- ただ、この状態だとy座標の下へ向かって、一定の速度で「移動」しているだけなので、「落ちている」と演出するには少し物足りなく感じられます。
クエスト②
- 変数を使って、プレイヤーが落ちるように見えるスクリプトをつくりましょう。
仕様
- 「重力」という変数をつくる
- 変数「重力」の初期値は0
- 変数「重力」は-1ずつ減っていく
- プレイヤーは、y座標に変数「重力」ずつ変える
動作確認
答え合わせ
なぜうごくのか
- 変数「重力」が-1ずつ変わることによって、変数「重力」は、-1 , -2 , -3 , -4 とマイナスの値が大きくなります。
- それによって、プレイヤーの「y座標が-1ずつ変わる」「-2ずつ変わる」「-3ずつ変わる」とマイナスの値が大きくなることによって、「下へ向かって速く動く」 = 「プレイヤーがあたかも落ちている」ように見えるわけです。
クエスト③
- 地面に触れたら、プレイヤーは地面で止まるようにしましょう。
仕様
- 背景に地面を描く(単色)
- プレイヤーが落下中(y座標で下へ移動中)に、下記2点を実装する
- 「もし地面の色に触れたら」「変数の重力を0にする」
- 「もし地面の色に触れていなければ」「変数の重力を-1にする」
動作確認(正解)
よくある間違いの動作
よくある間違いのスクリプト
なぜ間違えるのか
- 地面に触れたときに変数「重力」が0になっても、結局は「ずっと」の中で、変数「重力」が-1ずつ変わることになります。(「ずっと」の中をよく見てみよう)
- そのため、毒の沼のように沈んでしまうように見えるわけです。
- 逆に、「水」の表現、「沼」の表現として使うこともできます。
- ただし、今回は「地面」としての表現なので、上記スクリプトは間違いとしています。
答え合わせ
なぜうごくのか
- プレイヤーは「ずっと」「y座標が変数「重力」ずつ変える」状態です。
- そのため、「地面に触れているかどうか」を「もし〜でなければ」を使います。
- もし「地面の色に触れていたら、変数「重力」は0にします。
- でなければ、変数「重力」は-1ずつ変えます。
- 変数「重力」の変数を使い始めて、なぜプレイヤーが落ちているのかわからなくなったら、クエスト②をもう一度やってみましょう。
クエスト④
- 地面にいるときに、プレイヤーをジャンプできるようにしましょう。
仕様
- プレイヤーが地面にいるときに、「スペースキーがおされたら」「変数「重力」を20」にする
動作確認
答え合わせ
なぜうごくのか
- スペースキーがおされたときに、変数「重力」を20にしたことにより、プレイヤーは「y座標を20ずつ変える」ところから、y座標の移動を始めます。
- 「20」はプラスの値のため、プレイヤーのy座標は上へと移動していきます。これがジャンプの表現となるわけです。
- 変数「重力」は-1ずつ変えているため、プレイヤーのy座標は19 , 18 , 17 と、-1ずつ減っていきます。
- そのため、プレイヤーのy座標に設定している変数「重力」はいずれ0になり、そこがプレイヤーのジャンプの最高地点となります。
- 以降は、変数「重力」は-1ずつ減っていくため、プレイヤーのy座標は0, -1 , -2 , -3 と、-1ずつ減っていきます。
- 変数「重力」が-1ずつ減ることによって、プレイヤーのy座標が下へ移動することについては、クエスト②を見直してみましょう。