私のゲームはScalaのマップのキーとしてのクラス型
class Enemy
人は人工知能/機能私は
trait Moving
trait VerticalMover extends Moving
trait RandomMover extends Moving
などで変更できます。今私は、特性に基づいてプリロードされたものをフェッチする必要があります。私がしたいのは、Movingをキーとして拡張し、EnemyContainerを特性関連のコンテンツをプリロードした値として受け入れるすべての特性を受け入れるマップを持つことです。
しかし、どのように私はそのようなマップを定義し、いくつかの敵のインスタンスによってコンテナを取得するために私の.get()をどのようにフォーマットするのですか?何かが好きです:
val myEnemy = new Enemy with RandomMover
val myDetails:EnemyContainer = enemyDetailsStore.get(myEnemy.getClass)
'myEnemy'が' VerticalMover'を拡張する場合は 'enemyDetailsStore'を返し、' RandomMover'を拡張する場合はもう一つのものを返すようにしますか?もしそれが両方に広がったら? –
はい、そうです。しかし私は私の考え全体の健全性を疑問視し始めています。たぶん、私はちょうど形質に埋め込まれたいくつかのキーストリングをキーとして使用するべきです。したがって、特性線形化では、最後のオーバーライド特性はEnemyContainer、つまり敵を表示するために使用されたテクスチャを設定します。 – vertti
ほとんどの場合、特性/インターフェースのポイントは「X *のやり方を知っている」と言いますが、Xの実装方法は違っています。他の詳細がなければ、 'Moving'特性に' getMovingStrategy'や 'move'メソッドを直接持たせることができます。これは、垂直方向とランダムムーバーの下位クラスに適切に実装できます。 –