私のゲームには一連の 10 のミッションが含まれており、各ミッションにはゲームプレイ中に完了する 3 つの目標があります (実績に非常に似ています)。3 つの目的が任意の順序で完了すると、ミッションが完了し、プレイヤーには次のミッションの目的が与えられます。
これをどのように構成するか、私は苦労しています。長さ 10 のミッション クラスの配列を作成しました。各クラスには、目的の詳細 (名前、目標値、完了状態など) ごとに長さ 3 のクラスの配列が含まれています。達成された目標イベントが現在のミッションの一部であるかどうか、または現在アクティブでないために無視する必要があるかどうかを簡単に確認できます。
var missionControl : MissionClass[];
class MissionClass
{
var mission = new ObjectiveInfo[3];
}
class ObjectiveInfo
{
var name : String;
var goalValue : int;
var completionState : boolean;
var total : int;
}
ただし、達成された目的のイベントを送信する方法は、配列内の場所を指すのではなく、文字列参照を送信することです (後で順序をシャッフルする場合)。ただし、文字列を使用してアイテムを見つけるにはどうすればよいですか?を配列に入れて、そのアイテムの親ミッション クラスが現在アクティブなミッションかどうかを確認しますか?
function ObjectiveCheck ( objectiveName : String )
{
// Find the objective by name
// Find out if the objective we've been passed is part of the currently active mission
// If it is, check if we've met the goalValue, if so set objective to completed
}
// 編集: 文字列比較を使用した新しいコード。itemは現在のミッション番号 (1/10) に等しく、 item 、、は各ミッション目標の現在のステータスを保持missionStatus
する配列です(0 = 未完了、1 = 以前に完了、2 = 新たに完了)。0
1
2
3
function ObjectiveCheck ( objectiveName : String, num : int )
{
// Find out if the objective we've been passed is part of the currently active mission and see if it's met the goal value
var currentMission = missionControl[ missionStatus[0] ];
for ( var i=0; i < 3; i++ )
if ( missionStatus[i+1] == 0 && currentMission[i].name == objectiveName && num >= currentMission[i].goalValue )
{
missionStatus[i+1] = 2;
// Play mission complete sound
}
}