さぁ、スクラッチでナニ作る!?
変数GRAVITYに1か-1を格納し、速度・向き・判定など全ての値に掛け算するだけで重力方向を一括反転する設計が際立っている。条件分岐を増やさずに動作を反転させる「符号反転」パターンは、コードの重複ゼロという明快な結論を生む。griffpatchのGeometry Dashシリーズでも実践されているこの手法が、わずか2スプライトのシンプルな作品にどう組み込まれているか、作り方を見ていこう。
動画で見てみよう
チュートリアルの元になった作品
今回の目標
スターター作品をリミックスしよう
このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
スターター作品をダウンロード
#1ネコの初期設定
準備
スプライト「ニンジャキャット」を開く
| スプライトについて |
|---|
| 重力に従って縦方向に動くニンジャキャットのスプライト。上矢印キーでジャンプし、着地・上昇・下降に応じてコスチュームが切り替わる |
| どんな役割か |
| 重力に引っ張られながらジャンプするネコを作るよ!上矢印キーを押すとネコが飛び上がるんだ。重力の方向が変わると動き方もガラッと変わるよ! |
変数「縦速度」を追加
縦方向の移動速度。重力によって毎フレーム変化し、ジャンプ時に初期値がセットされる
実装
回転方法を ( ) にするを「自由に回転」にして、ネコが自由に回れるようにしておくよ。x座標を ( ) 、y座標を ( ) にするで座標(0, -100)に配置して、「縦速度」を0にリセットするんだ。
#2重力変数とゲーム開始
準備
変数「■重力」を追加
重力の強さと方向を表すグローバル変数。1または-1の値を取り、GravityFlipがクリックされると反転する
メッセージ「スタート」を追加
ゲーム開始を知らせるメッセージ。フラグを押したときにNinjaCatが送信する
実装
「■重力」に1をセットして、( ) を送るで「スタート」メッセージを送るよ。この1という値があとで大活躍するんだ。-1にするだけで重力がひっくり返る仕掛けで、もしこの変数を使わなかったら、上向きと下向きで別々のコードを書く必要が出てきてしまうんだよ。
#3重力加速度のループ
ずっとの中で、「縦速度」を( ) * ( )で-1×「■重力」を計算した分だけ変えるんだ。「■重力」が1なら毎フレーム-1ずつ減って下に落ちるし、-1なら+1ずつ増えて上に飛んでいく。
#4着地の条件判定
もし ( ) ならの条件はちょっと長いけど、やってることは2つの質問を同時にしてるだけ。y座標×「■重力」が-100より小さいかどうかで「地面より下にいるか」をチェックして、さらに「ジャンプ中フラグ」が0のときだけ着地処理に入る。y座標に「■重力」を掛けることで、重力がどっち向きでも同じ条件式で判定できるのがミソだね。
#5着地処理とy座標の移動
着地時は「縦速度」を0にして、コスチュームを「待機」に切り替えるんだ。y座標を ( ) ずつ変えるで「縦速度」の分だけy座標を変えるのは、この条件判定の外側に置くよ。そうすればジャンプ中も落下中も着地後も、毎フレーム速度に応じて移動が行われるんだ。
#6ジャンプ入力の受付
ずっとの中でまず( ) 度に向けるを90×「■重力」にセットするよ。「■重力」が1なら普通の向き、-1なら反転した見た目になって、重力の方向が視覚的にわかるんだ。そのあと上矢印キーが押されたかをチェックするよ。
#7ジャンプの実行
準備
変数「ジャンプ中フラグ」を追加
ジャンプ中かどうかを示すフラグ。1でジャンプ中、0で着地状態
実装
「ジャンプ中フラグ」を1にして、「縦速度」に12×「■重力」をセットするんだ。「■重力」が1なら速度は+12で上に、-1なら-12で下に飛ぶ。コスチュームを「ジャンプ1」に切り替えて、飛び上がる見た目にするよ。
ジャンプの高さは「縦速度」の初期値12で決まるんだ。大きくすればもっと高く飛べるし、小さくすれば低いジャンプになるよ。
#8落下の検知
「縦速度」×「■重力」が0より小さくなったら、ネコは落下に転じたということ。( ) < ( )で比較して、「ジャンプ中フラグ」を0に戻しコスチュームを「ジャンプ2」に切り替えるんだ。ここでも掛け算のおかげで、どちらの重力方向でも正しく検知できる仕組みで、もしこの掛け算をしなかったら重力反転時に落下の判定がおかしくなってしまうんだよね。
#9重力反転スイッチ
準備
スプライト「重力反転スイッチ」を開く
| スプライトについて |
|---|
| クリックすると重力の方向を反転させるスプライト。GRAVITY変数に-1を掛けることで上下の重力方向を切り替える |
| どんな役割か |
| クリックするだけで重力をひっくり返す仕掛けを作るよ!クリックするとネコが天井側に引き寄せられるようになるんだ。もう一度クリックすれば元に戻るよ! |
実装
このスプライトが押されたときで重力反転スイッチがクリックされたら、「■重力」に「■重力」×(-1)をセットするよ。1は-1に、-1は1になるトグルスイッチの仕組みだね。ニンジャキャット側のコードを一切変えなくても動作が反転するのが、この設計のすごいところだよ。
クリックしたことが分かるように、( ) の効果を ( ) にするで「明るさ」を30にして0.1秒待ってから画像効果をリセットするよ。ピカッと光る一瞬のフィードバックが、操作感をグッと良くしてくれる。
まとめ
どうだった?変数に1か-1を入れて掛け算するだけで、重力方向がまるごとひっくり返ったよね。条件分岐ゼロでこんな仕掛けが作れるって、なかなかスマートだと思わない?このGRAVITY変数パターンはgriffpatchのGeometry Dashでも使われているテクニックで、カメラやパーティクルにも応用できるよ。ぜひ自分のゲームにも取り入れてみてね!