2012-04-12 12 views
0

私はOOPを練習するためのFlash turn-based RPGを作っています(誰もしていません:P)私はWeapons、Items、そしてそのすべてのJazzでかなり良い設定をしています。私は現在、私がどのように私のキャラクターを作るかを考えていますが。マルチユーザRPGのデータベース

現在、私はbattlerクラスを拡張playerenemyクラスを持っています。

 Battler 
    /\ 
    / \ 
Player Enemy 

playerクラスは、グラフィックスとすべてのことを追加し、プレイヤー自身を初期化し、いくつかの機能があります。私のpartyクラスは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のいずれかを使用しても問題ありません。私を助けてください!前もって感謝します。

答えて

2

AS3では、静的関数とインスタンス関数を使用できます。 player.returnarmor()に電話すると、静的関数が呼び出されます。あなたは、インスタンス関数を持っていて、あなたが望む鎧の値を持つプレイヤーのインスタンスのためにそれを呼び出したいと思っています。

いくつかの文字がある場合は、名前はそれぞれ3つまたは4つ以上の変数にすることができます。そのための配列やその他のコンテナが必要です。別だけでなく、あなたが現存するすべてのプレイヤーの配列を持っているかもしれません

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

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

そして、プレイヤーの鎧を取得するために...私たちは、あなたがSPUNKY相棒の鎧をしたいと言うだろう配列は、戦闘で使用された場合、現在のパーティー/バトルのプレイヤーだけとなります。そうすることで、あなたの敵は無作為に選手を狙うことができます。

2

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

+0

ええエンティティはクールですが、あなたに必要な処理速度に応じて、あなたはテーブルストレージ、MongoDBのかRavenDBのようなNoSQLソリューションを検討する必要があります。クールなことは、MVC4の新しいAPIツールも見てみたいです。彼らはあなたのプレーヤーモデルを簡単に使いやすいAPIで足場を張ることを本当に簡単にします。 – d4rklit3