ニトロカーで駆け抜け!タイムアタックレース

ニトロカーで駆け抜け!タイムアタックレース
ok-scratch

スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。

マウスで車を上下に動かしながらライバルのトラックをよけて走るカーレースの作り方を解説。コインを集めてニトロをため、ブーストで加速する仕組みや当たり判定の作り方も学べます。

さぁ、スクラッチでナニ作る!?

チュートリアルの元になった作品

racing

racing

by ok-scratch
プレイしておこう プレイしておこう
今回のスクラッチを作る参考作品です。自機はほぼその場に固定されたまま、ライバルもコインもレーン線も全部SPEEDってグローバル変数1個の倍数で流れてるだけなのがキレッキレ。ブーストで数字が上がった瞬間、画面ぜんぶが一体で加速する感覚になるのがマジでエモい。当たり判定もこの1変数で難度ごと制御できちゃう発想、どうやって作ってるか見ていこう。

今回の目標

  • マウスで車を上下に動かしてライバルのトラックをよけながら走る
  • コインを集めてニトロをため、ブーストで加速する
  • 一定距離を走りきってゴールし、ベストタイムを更新する

スターター作品をリミックスしよう

このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
スターター作品をダウンロード

#1ステージ: 背景と音量の準備

ok-scratch ok-scratch
まずはステージの準備から。ゲームの舞台になる街の背景をセットして、音量もそろえておくよ。

準備

スプライト「stage」を開く

ステージ
スプライトについて
街なかを舞台にしたレーシングゲームのステージ。

実装

step-0

イベントgreenflag が押されたときで旗が押されたら、見た目背景を ( ) にするで街なみの背景に切り替えるんだ。

最後に音量を ( ) %にするで音量を80にそろえておく。これで音の大きさが、どのパソコンでも安定するよ。

確認プレビューしておこう 確認プレビューしておこう
旗を押すと背景がカラフルシティの街なみに切り替わったね。音量も少し下げて、レースの舞台が整った感じ。

#2プレイヤーの車: 車の向きの設定

ok-scratch ok-scratch
背景ができたから、次はプレイヤーの車を作っていく。まずは旗クリックのときの初期設定から。

準備

スプライト「プレイヤーの車」を開く

プレイヤーの車プレイヤーの車
スプライトについて
マウスの上下操作でよけながら走る、プレイヤーが操作する車。
どんな役割か
マウスを上下に動かして車を操作するレーシングゲームを作るよ。対向トラックにぶつからないようによけながら、コインをとってニトロをためてブーストしよう!

実装

step-1

見た目コスチュームを ( ) にするで車のコスチュームにして、動き回転方法を ( ) にするの回転方法を「左右のみ」にしておくよ。こうすると車が上下逆さまにならないんだ。

動き( ) 度に向けるで向きを90、つまり右向きにセット。レースだから右を向いてるのが基本ってこと。

確認プレビューしておこう 確認プレビューしておこう
プレイヤーの車が登場して、コスチュームと向きがセットされたよ。左右反転の回転方法だから、あとで自然に動くやつ。

#3プレイヤーの車: 車の位置と大きさ

ok-scratch ok-scratch
続いて車の見た目まわりをととのえるよ。
step-2

見た目大きさを ( ) %にするで大きさを55にして、動きx座標を ( ) 、y座標を ( ) にするで画面の左寄り下、座標(-140, -60)にスタート位置を決める。

画像効果をぜんぶなくして、見た目( ) へ移動するで車をいちばん前に出す。ほかのスプライトに隠れないようにするためなんだ。

確認プレビューしておこう 確認プレビューしておこう
車のサイズを55にして、gotoxyで画面の左下に配置。グラフィック効果もリセットして、最前面に持ってきた感じ。

#4プレイヤーの車: 車の変数を初期化

ok-scratch ok-scratch
車を表示する前に、あとで使う変数をリセットしておくよ。

準備

変数「衝突後の無敵時間」を追加

トラックに衝突したあと、しばらく再衝突しないようにするための残り時間。

変数「衝突後の無敵時間」を追加

変数「ブースト中かどうか」を追加

マウスを押してニトロブースト中かどうかを表すフラグ。

変数「ブースト中かどうか」を追加

実装

step-3

「衝突後の無敵時間」と「ブースト中かどうか」を両方0にセット。ゲーム開始時はどっちもオフの状態からスタートってわけ。

準備ができたら見た目表示するで車を出すよ。これで車の初期設定はひとまず完成だね。

確認プレビューしておこう 確認プレビューしておこう
衝突後の無敵時間とブースト中フラグをどっちも0で初期化して、車を表示。これで走り出す前の下ごしらえ完了。

#5審判: 審判の初期設定

ok-scratch ok-scratch
車の準備ができたから、今度はレースを仕切る「審判」を作っていくよ。ゲーム全体の進行を管理する大事な役なんだ。

準備

スプライト「審判」を開く

審判審判
スプライトについて
レースの開始合図やベストタイムの表示、ゴール後の演出をおこなうキャラクター。
どんな役割か
レースの開始をアナウンスして、カウントダウンしてからレースをスタートさせるキャラクターを作るよ。ゴールしたらベストタイムを表示してくれるんだ。

変数「★ゲームの状態」を追加

レースの進行状況をあらわす番号(0:準備中/1:レース中/2:ゴール後)。

変数「★ゲームの状態」を追加

実装

step-4

旗クリックで審判のコスチュームにして、大きさ60、画面右上あたりの座標(130, 90)に配置。見た目( ) へ移動するでいちばん前に出しておくよ。

最後に「★ゲームの状態」を0にセット。この0が「まだ準備中」を意味する合図だよ。

確認プレビューしておこう 確認プレビューしておこう
審判が右上に出てきて、サイズ60で最前面に配置。ゲームの状態を0、つまり準備中にセットしたとこから始まる。

#6審判: ゲーム変数の初期化

ok-scratch ok-scratch
審判が旗クリックのときに、ゲームで使うグローバル変数をまとめて初期化するよ。

準備

変数「★スピード」を追加

車が前に進む速さ。衝突やブーストで変化する。

変数「★スピード」を追加

変数「★進んだ距離」を追加

レース開始からこれまでに進んだ距離の合計。

変数「★進んだ距離」を追加

変数「★ニトロ」を追加

コインを取ると増える、ブーストに使うためのニトロの量。

変数「★ニトロ」を追加

変数「★ゴールタイム」を追加

ゴールした瞬間のタイマーの値。ベストタイムとの比較に使う。

変数「★ゴールタイム」を追加

変数「■ゴールまでの距離」を追加

レースがゴールになるまでの距離。旗クリック時に一度だけ設定される。

変数「■ゴールまでの距離」を追加

実装

step-5

「★スピード」と「★進んだ距離」を0、「★ニトロ」を40からスタート。最初からニトロが少しあるから、序盤でもブーストを試せるんだ。

「■ゴールまでの距離」を1500に決めて、変数変数 ( ) を表示するで「★進んだ距離」を画面に表示する。

#7審判: スタートの合図

ok-scratch ok-scratch
続けて残りのメーターを表示して、レース開始のアナウンスをするよ。

準備

変数「■ベストタイム」を追加

これまでのゴールタイムの最速記録。

変数「■ベストタイム」を追加

実装

step-6

「★ニトロ」と「■ベストタイム」を画面に出して審判を表示。そのあと見た目( ) と ( ) 秒言うで操作説明を2つ順番にしゃべるんだ。

説明が終わったら「3」を0.6秒だけ表示する。ここからカウントダウンの始まりだね。

確認プレビューしておこう 確認プレビューしておこう
スピードや距離、ニトロなんかの変数をまとめて初期化して画面に表示。マウスで動かしてトラックをよけろ、って案内も出たね。

#8審判: カウントダウン開始

ok-scratch ok-scratch
「2」「1」とカウントダウンを続けて、いよいよレースを走り出させるよ。

準備

メッセージ「レーススタート」を追加

カウントダウンが終わり、レースが始まったことを知らせるメッセージ。

メッセージ「レーススタート」を追加

実装

step-7

「★ゲームの状態」を1(レース中)に、「★スピード」を4にセットして、イベント( ) を送るで「レーススタート」の合図を全スプライトに送る。

最後に「GO!」を表示してから見た目隠すで審判を隠す。この合図を受けて、車もライバルもコインもいっせいに動き出すんだ。

確認プレビューしておこう 確認プレビューしておこう
審判が3、2、1とカウントダウンして、ゲームの状態をレース中に切り替え。GOの合図でレーススタートの号令が飛んだ。

#9プレイヤーの車: マウス追従の動き

ok-scratch ok-scratch
審判の設定が終わったから、ここからはプレイヤーの車を本格的に動かしていくよ。「レーススタート」の合図を受けて、いよいよ車が動き出す。まずはマウスの上下に車を追わせる部分。

準備

スプライト「プレイヤーの車」を開く

プレイヤーの車
プレイヤーの車

実装

step-8

イベント( ) を受け取ったときで合図を受けたらタイマーをリセットして、制御ずっとでずっと処理を続けるんだ。

ループの中では、マウスのy座標と車のy座標の差の0.25倍だけ動きy座標を ( ) ずつ変えるで近づける。上にはみ出しそうになったら押し戻して、画面の外へ飛び出さないようにするよ。

ok-scratch ok-scratch
普通マウスに追従させるときは「マウスのy座標へ行く」で一瞬でワープさせるよね。でもこの車は、目標との差の0.25倍ずつしか動かないんだ。毎フレーム4分の1ずつ近づくから、動きに慣性が生まれてぬるっと追いかける感じになる。これは線形補間、りんかい、lerpって呼ばれるテクニックで、カメラワークやキャラの追従によく使われるやり方なんだ。

確認プレビューしておこう 確認プレビューしておこう
スタートの合図を受け取ると、マウスのY座標に向かって車がスッと寄っていくよ。上に行きすぎないよう上端で止める処理も入ってる。

#10プレイヤーの車: 下のはみ出しを防ぐ

ok-scratch ok-scratch
さっきは上のはみ出しを止めたから、今度は下側もふさぐよ。
step-9

車のy座標が-120より下になったら、動きy座標を ( ) にするで-120に戻す。上と下の両方をおさえて、車が走れるレーンの範囲がきっちり決まるんだ。

#11プレイヤーの車: ブーストの入力判定

ok-scratch ok-scratch
ここからニトロブーストの仕組みだよ。マウスを押してるあいだ加速できるようにするよ。
step-10

制御もし ( ) ならでなければで「マウスが押されている」かつ「★ニトロが0より多い」かを判定する。両方そろったときだけブースト状態に入るんだ。

ブーストに入った最初のフレームだけ「ブースト中かどうか」を1にして、加速音を1回だけ鳴らす。フラグ管理で音の連打を防いでるんだけど、もしこの「最初の1フレームだけ」っていう判定をしなかったら、マウスを押してるあいだじゅう毎フレーム加速音が鳴りっぱなしでうるさくなってしまう

確認プレビューしておこう 確認プレビューしておこう
下端でも止まるようにして、マウスを押すとニトロがある間だけブースト開始。エンジンのブロロッてサウンドが鳴るようになった感じ。

#12プレイヤーの車: ブーストの加速

ok-scratch ok-scratch
ブースト中は「★スピード」をぐんぐん上げていく。ただ足すんじゃなくて、なめらかに加速させるのがポイントなんだ。
step-11

変数( ) を ( ) ずつ変えるで、9といまのスピードの差を6で割った分だけスピードを足す。上限の9に近づくほど増える量が減って、自然に頭打ちになるよ。

ok-scratch ok-scratch
スピードを上げるとき、毎回おなじ数を足すとカクッと一定の割合で上がっていくよね。でもこの作品は「目標の9との差」を6で割って足してる。最初は差が大きいからガッと加速して、9に近づくと差が小さくなってゆるやかになる。これがイージング、ease-outって呼ばれる加速のさせ方で、車やUIのアニメがぬるっと気持ちよく動く秘密なんだ。

#13プレイヤーの車: ニトロ消費と前進

ok-scratch ok-scratch
ブースト中はニトロを消費しながら、車を少し前へ送り出すよ。
step-12

「★ニトロ」を1.2ずつ減らして、0より下がったら0で止める。ニトロが尽きたらブーストはおしまいだよ。

さらにブースト中は車の位置を少し前へ押し出して、加速してる感じを出す。マウスを離したら「ブースト中かどうか」を0に戻して、通常モードへ切り替えるんだ。

確認プレビューしておこう 確認プレビューしておこう
ブースト中はニトロを少しずつ消費して、車が前へグイッと寄っていくよ。ニトロが尽きたらブーストフラグを戻す仕組み。

#14プレイヤーの車: 通常時の速度戻し

ok-scratch ok-scratch
マウスを押してない通常のときは、スピードを落ち着いた速さにもどしていくよ。
step-13

変数( ) を ( ) ずつ変えるで、4といまのスピードの差を8で割った分だけ足す。ブーストの9より低い4を目標にするから、ゆっくり減速して巡航スピードに落ち着くんだ。

車の位置もほぼ定位置の-140あたりへゆっくり引き戻す。ブーストのときより割る数が大きいぶん、動きがおだやかになるよ。

#15プレイヤーの車: 距離をためる

ok-scratch ok-scratch
毎フレーム、進んだ距離をコツコツ足していくよ。
step-14

変数( ) を ( ) ずつ変えるで「★進んだ距離」にスピードの半分を足す。速く走るほど距離の増えかたも速くなって、ゴールがぐんぐん近づくんだ。

#16対向トラック: ライバルの向き設定

ok-scratch ok-scratch
車の動きがひととおりできたから、次はぶつかっちゃいけない対向トラックを作るよ。

準備

スプライト「対向トラック」を開く

対向トラック対向トラック
スプライトについて
プレイヤーの車に向かって走ってくる障害物のトラック。クローンで次々に出現する。
どんな役割か
反対車線から走ってくるトラックを作るよ。3種類の見た目をランダムに切り替えて、クローンでどんどん出現させるんだ。

実装

step-15

旗クリックでトラックのコスチュームにして、動き回転方法を ( ) にするを「左右のみ」に。動き( ) 度に向けるで向きを-90にして、車と逆の左向きにするんだ。

対向車だから左を向いて走ってくる、ってのを向きで表現してるんだよ。

#17対向トラック: ライバルの初期配置

ok-scratch ok-scratch
続いてトラックの大きさと位置、種類をセットするよ。

準備

変数「トラックの種類」を追加

出現したトラックの見た目の種類をあらわす1〜3の値。

変数「トラックの種類」を追加

実装

step-16

大きさを25にして、画面右の外(260, -60)に配置。「トラックの種類」をいったん1にしておくよ。

最後に見た目隠すで本体を隠す。実際に走るのはこのあと作るクローンのほうだから、本体は見えなくていいんだ。

#18対向トラック: トラックを次々出す

ok-scratch ok-scratch
ここからが対向トラックの本番。レース中はずっとトラックを生み出し続けるよ。
step-17

イベント( ) を受け取ったときで「レーススタート」を受けたら、制御( ) まで繰り返すで「★ゲームの状態」が2(ゴール)になるまでループ。

ループの中では0.5〜1.2秒のランダムな間をあけて、制御( ) のクローンを作るで自分のクローンを作る。間隔がランダムだから、トラックの出るタイミングが読めなくなるんだ。

確認プレビューしておこう 確認プレビューしておこう
進んだ距離がだんだん増えていって、反対車線から対向トラックがクローンで次々わいてくるようになった。ランダムな間隔で出てくる感じ。

#19対向トラック: クローンの見た目選び

ok-scratch ok-scratch
生まれたクローン一台ずつに、ランダムな見た目を割り当てていくよ。
step-18

制御クローンされたときでクローンが動き出したら、「トラックの種類」を1〜3のランダムな数にセットするんだ。

その数が1なら見た目コスチュームを ( ) にするで1種類めのトラックの見た目にする。種類ごとに見た目を変えて、3つのトラックが混ざって出てくる仕組み。

確認プレビューしておこう 確認プレビューしておこう
出てきたクローンが1から3のランダムな種類を引いて、種類1ならトラックの見た目aに切り替わるとこ。乱数で見た目を分けてる。

#20対向トラック: 2種類めの判定

ok-scratch ok-scratch
さっきは種類が1のときだったから、次は2のパターンを用意するよ。
step-19

制御もし ( ) ならで「トラックの種類」が2かどうかをチェックする。合っていれば、次のステップで2種類めの見た目に切り替えるんだ。

#21対向トラック: 2種類めの見た目

ok-scratch ok-scratch
種類が2だったときは、2種類めのトラックのコスチュームにするよ。
step-20

見た目コスチュームを ( ) にするで見た目を切り替えるだけ。さっきの判定とセットで、2番のトラックが完成だね。

確認プレビューしておこう 確認プレビューしておこう
種類2を引いたクローンはトラックの見た目bに切り替わるよ。同じクローンでも見た目がバラけて、渋滞っぽくなってきた。

#22対向トラック: 3種類めの見た目

ok-scratch ok-scratch
同じ流れで、3つめのパターンも用意していくよ。
step-21

「トラックの種類」が3なら見た目コスチュームを ( ) にするで3種類めのコスチュームに切り替える。これで1〜3のどれが出ても、ちゃんと見た目が変わる仕組みがそろったってわけ。

#23対向トラック: 出現位置をばらす

ok-scratch ok-scratch
見た目が決まったから、トラックを画面右の外に出して表示するよ。
step-22

動きx座標を ( ) 、y座標を ( ) にするで、x座標は260(画面右の外)、y座標はランダムなレーンの高さに配置する。出るたびに縦位置が変わるから、よけ方も毎回ちがってくるんだ。

位置が決まったら見た目表示するで表示。ここでようやくトラックが画面に見えるようになる。

#24対向トラック: トラックを左へ流す

ok-scratch ok-scratch
いよいよトラックを走らせるよ。といっても、動かすのは車じゃなくてトラックのほうなんだ。
step-23

制御( ) まで繰り返すで画面左のx座標-250より外に出るまで、動きx座標を ( ) ずつ変えるで左へ動かし続ける。左端まで流れたら制御このクローンを削除するでクローンを消すよ。

動かす量は「★スピード」の2倍。スピードが上がるほどトラックも速く流れて、迫ってくる迫力が増すんだ。

ok-scratch ok-scratch
このゲーム、じつは車はほとんどその場から動いてないんだ。かわりにトラックもコインもレーン線も、ぜんぶ「★スピード」に合わせて左へ流してる。自分が前に進んでるんじゃなくて、まわりが後ろに流れることで走ってる感じを作ってるってわけ。電車の窓から景色が流れて見えるのといっしょだね。1個のスピード変数でゲーム全体の流れる速さをまとめて操れるから、ブーストすれば世界ぜんぶが加速する。レースゲームの背骨になってる考え方だよ。

確認プレビューしておこう 確認プレビューしておこう
種類3ならcの見た目で、ランダムな高さに出現。そこから手前へ流れて、画面外まで行ったらクローンを削除する流れ。

#25プレイヤーの車: 無敵の点滅演出

ok-scratch ok-scratch
トラックができたから、車がぶつかったときの処理にもどるよ。ここは無敵時間の点滅がおもしろいポイントなんだ。

準備

スプライト「プレイヤーの車」を開く

プレイヤーの車
プレイヤーの車

実装

step-24

制御もし ( ) ならでなければで「衝突後の無敵時間」が残ってるかを見て、残ってれば1ずつ減らしながら見た目( ) の効果を ( ) にするの「幽霊」の効果を50と0で交互に切り替える。これで車がチカチカ点滅するよ。

普通なら無敵中は透明度をずっと同じにするけど、この作品はカウントダウンの数を2で割った余りで50か0を出し分けてる。余りが0と1で交互に入れ替わるから、コードひとつで点滅が作れちゃうんだ。

#26プレイヤーの車: クラッシュの処理

ok-scratch ok-scratch
無敵時間がないときにトラックに触れたら、それがクラッシュ。ペナルティを与えるよ。
step-25

衝突音を鳴らして「★スピード」を1までガクッと落とす。せっかく上げた速度が台無しになるから、トラックをよける緊張感が出るんだ。

同時に「衝突後の無敵時間」を45にセットするよ。しばらく連続でぶつからないように、無敵の点滅タイムが始まる。

#27プレイヤーの車: ゴール判定

ok-scratch ok-scratch
車の最後の仕事はゴール判定。進んだ距離がゴールに届いたかを毎フレーム確かめるよ。

準備

メッセージ「ゴール」を追加

車がゴールに到達したときに送られるメッセージ。

メッセージ「ゴール」を追加

実装

step-26

制御もし ( ) ならで「★進んだ距離」が「■ゴールまでの距離」を超えたら、そのときのタイマーの値を「★ゴールタイム」に記録して「★ゲームの状態」を2にするんだ。

そしてイベント( ) を送るで「ゴール」の合図を送り、制御 でこのスクリプトを止める。あとの表彰は審判にバトンタッチだね。

確認プレビューしておこう 確認プレビューしておこう
トラックに触れると点滅しながら減速、しばらく無敵時間が続くよ。進んだ距離がゴールに届くとレース終了の合図が飛ぶ。

#28審判: ゴールの演出

ok-scratch ok-scratch
車のゴール判定ができたから、「ゴール」の合図を受け取る審判の番。ここからゴール後の表彰を作っていく。

準備

スプライト「審判」を開く

審判
審判

実装

step-27

イベント( ) を受け取ったときで合図を受けたら歓声を鳴らして、審判を画面中央に出して表示するんだ。

確認プレビューしておこう 確認プレビューしておこう
ゴールの合図を受け取った審判が画面の真ん中に出てきて、歓声のサウンドが鳴るようになったね。ゴール後の演出ってやつ。

#29審判: ベスト更新の判定

ok-scratch ok-scratch
今回のタイムがベスト記録かどうかを判定するよ。
step-28

制御もし ( ) ならでなければで「■ベストタイムがまだ0(未記録)」か「今回のタイムがベストより速い」かを調べる。どちらかが当てはまれば新記録ってことなんだ。

初回はベストタイムが0だから、その一発めもちゃんと記録として扱えるように0のチェックを入れてるのがミソだね。

確認プレビューしておこう 確認プレビューしておこう
ベストタイムがまだ0か、今回のタイムがこれまでの記録より速いかを分岐でチェックするとこ。記録更新かどうかの判定。

#30審判: 新記録を保存

ok-scratch ok-scratch
新記録が出たときは、その値をベストタイムに保存して祝うよ。
step-29

変数( ) を ( ) にするで今回のタイムを保存するんだけど、10倍して四捨五入してから10で割ってる。こうすると小数第1位までのきれいな数字にそろうんだ。

そのあと「ゴール! ベストタイムこうしん!」とベストタイムをつなげてしゃべる。おめでとうの瞬間だね。

#31審判: 記録更新ならず

ok-scratch ok-scratch
新記録じゃなかったときは、いまのベストをそのまま伝える。
step-30

見た目( ) と ( ) 秒言うで「ゴール! いまのベストは」とベストタイムをつなげて表示する。次こそ更新をねらいたくなるんだ。

#32審判: もう一度への誘い

ok-scratch ok-scratch
最後に、リトライをうながすひとことを表示するよ。
step-31

見た目( ) と言うで「みどりのはたで もういちどはしろう!」と出したままにする。旗をまた押せば、さっきの初期化から仕切り直しってわけ。

#33コイン: コインの初期設定

ok-scratch ok-scratch
審判までできたから、次はニトロを回復できるコインを作るよ。

準備

スプライト「コイン」を開く

コインコイン
スプライトについて
プレイヤーが触れるとニトロが増えるアイテム。クローンで次々に出現する。
どんな役割か
プレイヤーの車がとれるコインを作るよ。クローンでランダムに出現して、車が触れるとニトロがたまるんだ。

実装

step-32

旗クリックでコインのコスチュームにして、大きさを45、画面右の外(260, -60)に配置するんだ。

コインもトラックと同じで、本体じゃなくてクローンを流していく作り。まずは本体の準備からだね。

#34コイン: コイン本体を隠す

ok-scratch ok-scratch
コイン本体の準備の仕上げをする。
step-33

画像効果をぜんぶなくしてから見た目隠すで本体を隠す。効果をリセットしておくのは、あとで取得演出に使う「幽霊」の効果を毎回0から始めたいからだよ。

#35コイン: コインを出し続ける

ok-scratch ok-scratch
レースが始まったら、コインをランダムに生み出していくよ。
step-34

イベント( ) を受け取ったときで「レーススタート」を受けて、「★ゲームの状態」が2になるまで制御( ) まで繰り返すでループ。

1〜2秒のランダムな間をあけて自分のクローンを作る。トラックよりゆっくりめの間隔だから、コインはほどよくばらけて出てくるんだ。

確認プレビューしておこう 確認プレビューしておこう
ゴール後にベストタイムを表示して、もう一度走ろうって案内も出るよ。さらにコインがクローンでランダムに出はじめた感じ。

#36コイン: コインのクローン配置

ok-scratch ok-scratch
生まれたコインのクローンを、走るレーンのどこかに置いていくよ。
step-35

制御クローンされたときで動き出したら、画像効果をリセットして大きさを45にそろえる。動きx座標を ( ) 、y座標を ( ) にするでx座標260、y座標はランダムなレーンの高さに配置するんだ。

クローンは生まれたとき親の効果を引き継いじゃうことがあるから、ここで効果を0にもどしておくのが安全ってわけ。

確認プレビューしておこう 確認プレビューしておこう
コインのクローンが効果をリセットしてサイズ45にそろえ、ランダムな高さに配置されるとこ。出現の下準備ってやつ。

#37コイン: コインを表示

ok-scratch ok-scratch
配置ができたら、コインを画面に出すよ。
step-36

見た目表示するで表示するだけ。ここからコインが左へ流れ始める準備がととのったんだ。

#38コイン: コインを流す

ok-scratch ok-scratch
コインをトラックと同じように左へ流していくよ。
step-37

制御( ) まで繰り返すで、画面左に消えるか車に触れるまでのどちらかになるまで、動きx座標を ( ) ずつ変えるで左へ動かす。動かす量はやっぱり「★スピード」の2倍なんだ。

終了条件が2つあるのがポイント。左まで流れきっても、途中で車がとっても、どっちでもループを抜けられる。

確認プレビューしておこう 確認プレビューしておこう
コインが表示されて手前に流れてくるよ。画面の外まで行くか、車に触れるまでずっと動き続ける仕組みになってる。

#39コイン: コイン取得

ok-scratch ok-scratch
コインが車に触れたときの、取得の処理を作るよ。
step-38

制御もし ( ) ならで車に触れているかを確かめて、触れていればコインの音を鳴らして「★ニトロ」を20増やす。これでブーストの燃料が回復するんだ。

#40コイン: 取得の演出

ok-scratch ok-scratch
ニトロが増えたら、コインがふわっと消える演出をつけるよ。
step-39

まず「★ニトロ」が100を超えたら100で止めて、上限からあふれないようにする。そのあと制御( ) 回繰り返すを5回まわして、コインを少しずつ大きくしながら「幽霊」の効果を上げていくんだ。

大きくしながら透明にすることで、パッと弾けて消えるような取得エフェクトになる。ひと手間だけど、とれた気持ちよさがぐっと増す。

確認プレビューしておこう 確認プレビューしておこう
コインを取るとサウンドが鳴ってニトロが20増える、上限は100でストップ。取った瞬間にふわっと大きくなる演出も入った。

#41コイン: コインを片付ける

ok-scratch ok-scratch
演出が終わったら、役目を終えたコインを消すよ。
step-40

制御このクローンを削除するでクローンを削除する。クローンはためこむと300個の上限にひっかかるから、使い終わったらこまめに消すのが大事だよ。

#42レーンの線: レーン線の設定

ok-scratch ok-scratch
コインが完成したから、ラストは路面が流れて見えるレーン線を作るよ。

準備

スプライト「レーンの線」を開く

レーンの線レーンの線
スプライトについて
コースの車線をあらわす線。奥から手前に流れるようにクローンで表示される。
どんな役割か
コースの車線を示す線を作るよ。3本の線をクローンで奥から手前に流して、走っている感じを出すんだ。

実装

step-41

旗クリックで線のコスチュームにして、大きさ25、画面右の外(250, -60)に配置するんだ。

この線を何本も左へ流すことで、道路が動いて見える走行エフェクトになる。地味だけど走ってる感を支える名脇役だね。

#43レーンの線: レーン本体を隠す

ok-scratch ok-scratch
レーン本体の準備を終わらせる。

準備

変数「線のたて位置」を追加

出現させる線のY座標。3本の線でそれぞれ違う位置に出す。

変数「線のたて位置」を追加

実装

step-42

「線のたて位置」をいったん-60にセットして、見た目隠すで本体を隠す。実際に流れるのはクローンだから、本体は見せないんだ。

#44レーンの線: レーン線を生成

ok-scratch ok-scratch
レース中、レーン線を3本ずつまとめて生み出していくよ。
step-43

イベント( ) を受け取ったときで「レーススタート」を受けて、「★ゲームの状態」が2になるまで制御( ) まで繰り返すでループ。

ループの中でまず「線のたて位置」を-100にして、制御( ) のクローンを作るで1本めのクローンを作る。

確認プレビューしておこう 確認プレビューしておこう
使い終わったコインのクローンを片付けて、今度はレーンの線が登場。3本の線をクローンで出す準備が始まったとこ。

#45レーンの線: 3本の線を出す

ok-scratch ok-scratch
続けて残り2本の線を、ちがう高さに出すよ。
step-44

「線のたて位置」を-60、-20と変えながらクローンを作って、上・中・下の3本の線をそろえる。同じ変数を使い回して、3本ぶんの位置を作り分けてるんだ。

3本出したら0.3秒待つ。この間隔があるおかげで、線がとぎれず一定のリズムで流れていく。

確認プレビューしておこう 確認プレビューしておこう
レーンの線を-100、-60、-20って違う高さに3本並べて、0.3秒ごとに送り出すよ。だんだん奥行きが出てくる感じ。

#46レーンの線: レーン線を奥へ

ok-scratch ok-scratch
生まれたレーン線のクローンを、道路の奥に配置するよ。
step-45

動きx座標を ( ) 、y座標を ( ) にするでx座標250、y座標は「線のたて位置」に置いて、見た目( ) へ移動するでいちばん後ろへ送る。車やトラックの下に敷くから路面っぽく見えて、見た目表示するで表示するんだ。

確認プレビューしておこう 確認プレビューしておこう
レーンのクローンが決まった高さに配置されて、いちばん後ろのレイヤーで表示。背景の一部みたいに馴染むとこ。

#47レーンの線: レーン線を流す

ok-scratch ok-scratch
最後にレーン線を左へ流して、走行エフェクトを完成させるよ。
step-46

制御( ) まで繰り返すで画面左に消えるまで、動きx座標を ( ) ずつ変えるで左へ動かす。動かす量は「★スピード」の2.5倍なんだ。

トラックやコインより速い2.5倍で流すことで、路面が手前へ勢いよく流れて見える。これでレースゲームがぜんぶ完成! マウスで走ってタイムを縮めてみよう。

確認プレビューしておこう 確認プレビューしておこう
レーンの線が手前へスーッと流れて、画面外で消えるようになったよ。止まってても走ってるみたいな見え方が完成。

まとめ

マウス追従とイージングだけで車の挙動に慣性を出せるって発見、けっこう衝撃だったんじゃないかな。SPEED変数1つで全オブジェクトを流す設計は、レース以外のスクロールゲームにもそのまま応用できる考え方。ぜひ自分の作品にも取り入れてみよう。

ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!