2016-05-26 3 views
0

私のゲームでは、空のロボットであるエンティティと、そのロボットを構築するための部品(アーム、ヘッド、武器、ツールなど)があり、各部分はそれぞれ異なるタイプ。私が望むのは、プレイヤーが動的に部品を追加してロボットを構築することです。 は私のエンティティクラスは、このような性質を持っていますエンティティにコンポーネントを動的に追加する

var arm: Component! 
var head: Component! 
var legs: Component! 
var weapon: Component! 

基本的には、ロボットの実体は、ゲーム内のすべての可能なコンポーネントのプロパティを持っている、と私は部品のための新しいアイデアを得るとき、私はロボットでそれらのプロパティを作成する必要がありますクラスを作成し、各プロパティをプレーヤが追加するコンポーネントに割り当てる関数を持っています。私はそれをやっている理由は、このような外部のクラスからアクセスできるようにすることです:

robot.weapon.shoot() 
robot.legs.move() 

しかし、ロボットの実体は開始時に、それのいずれかのコンポーネント参照を持たないようにするために私がしたいことはあり、Iプレイヤーの選択に応じて動的に追加したいと思っていて、上に示したようにそれらにアクセスすることができます。つまり、クラスが空であり、プレーヤーがコンポーネント(例えばピストル)を追加すると、またはその要素をそのエンティティの一部にする何らかの方法:

var weapon: Component = Pistol() 

それも可能かどうかはわかりません。

PS:私はGamePlayKitに組み込まれているコンポーネントエンティティシステムを使用していないので、私はしたくありません。

+1

作ることができ、なぜあなたはそれを使用したくないですか? –

+0

より一般的な文脈では、あなたがしたいことは*依存性注入*と呼ばれます。 –

答えて

0

私はあなたが必要と思われるのはNull Objectパターンです。特殊なアクションがないことを表す、ロボットコンポーネントのクラスを作成する必要があります。たとえば、AbsentWeaponクラスを作成し、shoot()はゲームで何もしないでください。または、武器なしで撮影しようとしていることをイベントコントロールクラスに伝えることもできます(これはデザインによって異なります)。

あなたはこれがGamePlayKitはまったく同じものです、あなたのチェックを容易にするためにこれらのクラスはシングルトンのようなオブジェクト(if myWeapon == EmptyComponents.getEmptyWeapon() {...}

関連する問題