私はゲームデザイナーだんが、私はここで仕事にあってもよいものを見ることができます...
Object Oriented Programmingは多くのオブジェクトの中にきちんとデータとロジックをカプセル化することにより、複雑さとダイナミズムのこの種のことができます。これらのオブジェクトは、オブジェクト間のメッセージングを使用してタスクを互いに委譲して、「口頭で」対話できます。メッセージの送信者は、受信者がメッセージをどのように解釈するのかを知る必要はなく、受信者まですべての動作方法を残しておく必要があります。現実の世界のように、代表団は物事をよりスムーズに動かすことができます。
たとえば、ニューヨーク市のDel Postoからキノコのリゾットを注文する場合は、キッチンに戻ってシェフに直接お話して注文しますか?エプロンをかけて自分でリゾットを準備しますか?あなたは最も近いキノコの農場に運転し、自分のキノコを選んでいますか?いいえ、あなたはしません。これらのタスクを単にウェイター、シェフのチーム、プロデューサーに委譲します。キノコのリゾットを手に入れるには、あなたが望むことをウェイターに伝えるだけです。残りは、委任の連鎖を通じて自動的に行われます。これと同じ種類の委任がゲーム内に存在する可能性があります。
ここで、オブジェクトに戻ります。いくつかのオブジェクトは、親オブジェクトからデータとロジックを継承します。このように、多くのデータ/ロジックを共通に持つことができます。私たちはこれらの兄弟を呼びましょう。ゲームクエストの例では、各クエストは、自身の「クエストオブジェクト」であり、ベースラインデータとロジックは親「クエストの親」から継承されています。クエストの兄弟は、特定のクエストに関係する余分なデータ/ロジックにタックを張って、互いに区別することができます。
ゲーム内のアクション(ゲームのメニューでの選択など)によっては、ゲームオブジェクトがアクティブなクエストオブジェクトを兄弟の1つに置き換えることができます。多くの場合は、これは本当に簡単なコマンドで行うことができます(擬似コードでは、任意の特定のプログラミング言語の後にモデル化されていない):
gameObject.activeQuest -> getCurrentObject();
//returns the object containing all of the data/logic of the current active quest:
Gibbons_GoldenArtifacts
//Let's say the quest description is "Scour the Catacombs of Gibbon for a
mysterious treasure"
gameObject.activeQuest -> setCurrentObject(Gibbon_DefeatGhost)
//sets the activeQuest object (note that QUEST OBJECT contains baseline data/logic)
//assuming, say, Gibbon_DefeatGhost is an object like so:
Gibbon_DefeatGhost={QUEST OBJECT};
Gibbon_DefeatGhost.extend(
description="Defeat Gibbon's ghost to retrieve his golden artifacts";
objective="Defeat Gibbon's ghost";
questNPC="Gibbon's ghost";
questLocation="Gibbon's Inner Sanctum"
questTriggers[1]="When PLAYER enters Gibbon's Inner Sanction: Release Gibbon's ghost";
questTriggers[2]="When Gibbon is slain: Drop Gibbon's golden artifacts"
)
をその時点からゲームオブジェクト自体は、おそらくアクティブなクエストと相互作用し、上オブジェクトは常に同じですが、アクティブなクエストオブジェクトは、クエストオブジェクトの兄弟の方法とは異なる方法でこれらのやりとりを認識し、異なるゲーム体験をもたらします。これに対する答えを見つけるために
私は完全にこの1上のピエロをfudgingないよ希望は...
かなり直接的な方法は、公式の世界エディタでゲームを開くことで、彼らがこのデータをどのようにモデル化するかを見てくださいエディタはゲームに含まれています。 –