ゲームにチェックポイントを追加する
前のチュートリアルでは、プレーヤーが敵と衝突したときにプレーヤーを削除していました。これは、ほとんどのゲームで機能する方法ではありません。通常、プレーヤーを削除する代わりに、ゲームには「チェックポイント」があります。「チェックポイント」は、ゲームの状態とプレーヤーの状態を変数に保存します。その後、プレーヤーが死亡すると、ゲームやプレーヤーは「チェックポイント」から再開します。
このチュートリアルでは、ゲーム全体の状態とプレイヤーの状態を保存するのは少し高度すぎるかもしれません。代わりに、プレーヤーが「チェックポイント」オブジェクトと衝突した場合、「チェックポイント」オブジェクトの位置を変数内に保存します。また、プレーヤーを削除する代わりに、変数内に保存されているものに位置を再設定します。
チェックポイントオブジェクトを作成する
ゲームで新しいスプライトオブジェクトを作成することから始めましょう。それを「チェックポイント」と呼びます。任意の.jpgまたは.pngスプライトイメージを使用できます。サボテンのスプライトを使用します。
次に、スプライトオブジェクトをシーンに追加します。スプライト画像が大きすぎるか小さすぎる可能性があります。スプライトのハンドルバーを使用して、画像のサイズを変更します。私の場合、上記のサボテンスプライトオブジェクトになります。「チェックポイント」を持ちたい場所にシーンに配置します。オブジェクトスプライトをシーンの複数の場所に追加できます。これにより、複数の「チェックポイント」を設定できます。
イベントを追加する
シーンに「チェックポイント」オブジェクトができたので、イベントを追加しましょう。「プレイヤー」と「チェックポイント」の間に衝突があるかどうかを確認する条件から始めます。衝突が発生した場合、「checkpoint」オブジェクトスプライトのXおよびY位置をcheckpointXおよびcheckpointYというシーン変数に保存します。
上記では、数式を使用して、「チェックポイント」オブジェクトスプライトのXおよびY位置を取得しています。これは、スコアテキストを更新した方法と同様の方法で行われます。値フィールドの横にある青いアイコンをクリックすると、数式エディターでさらに式を見つけることができます。
青いアイコンをクリックすると、使用可能なすべての式をカテゴリに分類して検索できます。
条件には、「プレーヤー」オブジェクトが衝突した「チェックポイント」オブジェクトのXおよびY位置が保存されます。そのため、「Player」スプライトオブジェクトを削除する代わりに、変数を使用してXとYの位置を設定します。
上記の例では、別の式のセットを使用して、保存された変数の値を取得し、「Player」の位置に渡します。
バグを解決する
一緒にフォローしていて、「チェックポイント」のサボテンも選択した場合、バグを作成したことに気付くかもしれません! プレイヤーキャラクターはサボテンより背が高いです。この場合、高さの差は「大きくない」です。これにより、一見問題は表示されないかもしれませんが、プレイヤーキャラクターが地面に引っかかっているのに気づくでしょうが、最も近い表面にテレポートされます。 高さの差が大きかった場合、キャラクターは地面の下に落ちていた可能性があります。したがって、この問題を修正することをお勧めします。.
この特定のケースでは、Y軸上のサボテンスプライトをプレーヤーと同じかそれ以上にスケーリングすることで問題を簡単に解決できます。ここまでで、スプライトのスケーリング/サイズ変更の方法がわかったので、もう少し難しいが、より正確なアプローチを使用してそれを行う方法を見てみましょう。問題を回避するために数学を使用しましょう。
より複雑なソリューションを使用して、強力な表現がいかに強力かを示しています。私の解決策は、変数を使用してプレーヤーのY位置を設定することです。それから、「プレーヤー」の高さから「チェックポイント」の高さを引きます。このようにして、Playerと「チェックポイント」の高さの違いを取得します。変数が返すものからその差を差し引くことで、ソリューションを終了できます。
それほど難しくはありませんが、まだ数学を使用している場合は、変数の値から、たとえば30を引きます。
試行錯誤と一緒に簡単なソリューションを使用すると、最適な数値を見つけることができます。ただし、正確な値を取得するために、使用するもののより複雑な例を示しました。
また、Yに値を加算するのではなく、なぜYから減算するのか疑問に思うかもしれません。問題は、「チェックポイント」の高さが「プレイヤー」の高さより低いことです。つまり、プレーヤーを高く設定する必要があるということです。Y軸の値が上から下に向かって増加することに注意してください。Y軸は上部の0から始まります。下に移動するにつれて増加します。技術的には、何かを高くするために低い値が必要です。 :-)
ほとんどの2Dエンジンはこの方法で機能します。座標0,0である左上隅から開始します。X軸に沿って右に行く最初の座標番号を増やします。そして、Y軸で下に行く2番目の座標番号を増やします。これがどのように適用されるかは上の画像で確認できます。
ここで、プレビューを実行してプレーヤーが停止すると、その位置は最後に保存された「チェックポイント」値に設定されます。しかし、もう1つのバグがあります!「チェックポイント」と衝突する前にプレーヤーが死亡した場合、変数は値0を返すため、プレーヤーは上のグラフに示されているように、位置0,0(左上隅)で再生成/再表示されます。
この問題は、チェックポイント値のデフォルト値をシーンの先頭のプレーヤーの開始位置に設定することで簡単に修正できます。
シーンの開始時には、プレイヤーが既にその位置にいて、プレイヤーの位置を取得し、そのプレイヤーの位置を「チェックポイント」位置として保存することを願っています。プレーヤーがチェックポイントのいずれかと衝突する前に死亡した場合、プレーヤーの元の位置変数を使用して、その位置をシーンの先頭に戻します。
システムの改善
これまでに学んだことを使用して、チェックポイントに達した場合にテキストを追加してメッセージを表示することができます。次に、サボテンをジャンプさせるアニメーションなどを再生して、もっと面白いものにしましょう。