0

私は OOP を練習するために Flash ターンベースの RPG を作成しています (誰も :P はしません :P)。ただ、キャラクターをどうするかは現在検討中です。

現在、クラスを拡張するplayerandクラスがあります。enemybattler

     Battler
      /  \
     /    \
 Player  Enemy

playerのクラスには、プレーヤー自体を初期化し、グラフィックスなどを追加する関数がいくつかあります。私partyのクラスは on を呼び出しplayer、次のようなパラメーターを渡します: player.setup(1) 1 は playerID です。

明確にするために、これは私のプレーヤーの擬似コードです。

{   setup(player_id)
    player =  **??????player_id??????????**
    name = player.name
    character_name = player.character_name
    character_index = player.character_index
    weapon_id = player.returnWeapon
 /*---------
    armor1_id = player.returnArmor //increase for other body parts
 ----------*/
    level = player.level
}

私の質問、またはそれ以上の問題は、プレーヤーのデータをどのように保存するかです。これはパーティーに多くのプレイヤーがいるゲームなので、多くのプレイヤーが必要です。

のようなものを実際にどのように使用しますplayer.returnArmorか?これを行うと、関数を呼び出すだけで、そのプレーヤーが誰であるかがわからないためです(パラメーターを使用できるplayer.returnArmor(player)と思いますが、これを行うためのより良い方法があると思います.

どの言語でも構いませんが、例としてアセンブリ言語を使用しないように注意してください ;)、C++、Actionscript 3、Ruby、および/または Java は問題ありません。私を助けてください!前もって感謝します。

4

2 に答える 2

2

ゲーム内の各アイテムが、個別に管理できる無関係なプロパティ (位置、速度、ビットマップ/メッシュ) のコレクションとして扱われるエンティティ システムの使用を検討する価値があるかもしれません。これにより、困難な問題 (スケーラビリティ、同期、ストレージ) が容易になる傾向があります。

于 2012-04-12T16:41:28.920 に答える
2

AS3 では、静的関数とインスタンス関数を使用できます。を呼び出す場合player.returnarmor()は、静的関数を呼び出しています。インスタンス関数が必要で、アーマー値が必要なプレイヤーのインスタンスに対して呼び出します。

少数 (<4) の文字がある場合は、それぞれに名前付き変数を使用できますが、3 つまたは 4 つを超える場合は、配列またはその他のコンテナーを使用する必要があります。

var mainProtagonist:player;
var spunkySidekick:player;
var whiteMage:player;
var players:Array = new Array();
players.push(mainProtagonist);
players.push(spunkySidekick);
players.push(whiteMage);

次に、プレイヤーのアーマーを取得するには...勇敢なサイドキックのアーマーが必要だとします。

players[1].returnarmor();
// or
spunkySidekick.returnarmor();

存在するすべてのプレイヤーの配列と、現在のパーティー/バトルのプレイヤーだけで、戦闘で使用される別の配列がある場合があります。そうすれば、敵はランダムにプレイヤーをターゲットにすることができ、現在戦闘中のプレイヤーのみをターゲットにすることができます。

于 2012-04-12T15:30:44.217 に答える