現時点でこの機能をゲームに実装するかどうかは未定です。私はプロジェクトが制御不能になることを望まないので、私は最初にコアメカニクスに焦点を合わせています。
これは、私がすべてをデータ駆動し、すべてを保存すると仮定して、後で実装するのが簡単な機能ですか?
現時点でこの機能をゲームに実装するかどうかは未定です。私はプロジェクトが制御不能になることを望まないので、私は最初にコアメカニクスに焦点を合わせています。
これは、私がすべてをデータ駆動し、すべてを保存すると仮定して、後で実装するのが簡単な機能ですか?
回答:
実装の技術的観点または設計の影響の観点から質問していますか?いずれにせよ、あなたの質問に対する答えは「はい」です。
技術的な側面から言えば、一般的に言えば、達成イベントに応答するコード内のフックを見つけて、そこに統計追跡コードを入れるだけです。ゲームで既に発生している正確に個別のイベントではないものを追跡する場合は、いくつかの新しいものを追加する必要があります(たとえば、X時間のプレイ時間)。
物事のデザインの側面から言えば、成果は外的な動機付けであり、それらを追加することは、コアゲームプレイループに実際にはあまり含まれていません。関係なく、彼らはかなり安全です。
shotsFired++
新しい弾丸がインスタンス化shotsHit++
される部分、および弾丸が別のプレイヤーに影響を与える部分にリンクするのはかなり簡単でした。誰がどの弾丸を撃ったかを追跡するのに役立ちました(情報を使用して誰が何を殺したかなどを追跡するため)
すでに既存の人々が良い答えを追加しているので、明らかにされていない状況に答えさせてください。
ゲームのコーディングを完了し、アチーブメントのコーディングを開始し、特定のイベントなどで多くの変数とカウントを維持し、それらをクリアするのが非常に複雑であることに気付いた場合。
すべてのイベントを受け取るために、常に1つのクラス(できればシングルトン)を作成できます。すべての成果を一覧表示します。次に、追跡する必要があるすべてのゲームイベントをリストします。たとえば、現在のリストは次のようになります
KILL ENEMY-ウォーキング、弾丸PLAYER DEATH-falling_off、health ENTER_ROOM、EXIT_ROOMなど
歩行、弾丸などの追加の詳細は、パラメータにすることができます。その達成追跡クラスにfireEventという1つの関数があります。イベント内でfireEventsを呼び出す必要があるコード内のすべての場所を検索し、その関数を呼び出します。ここで、Achievementsクラスで残りの汚い作業を行います。これは、既存のコードとコードの成果を妨げない最も安全な方法です。それは私にとってはかなり早く解決しました。