私は現在、特定のオブジェクトの多数のパブリックプロパティをアニメーション化しようとしています。通常、これらはfloat型またはfloatのベクトルです(型はコンパイル時に認識されます)。次のことができるようになりたい:
- それらに静的な値を割り当てます(MyObject.Duration = 10f;)または
- 最小値と最大値を指定し、オプションで重みも指定して、ランダムな値を割り当てます(MyObject.Duration = new RandomFloat(5f、20f、2f);)または
- このプロパティを別のオブジェクトのプロパティに「バインド」します(子オブジェクトが、色、サイズ、sthなど、そのプロパティの一部を親オブジェクトにバインドするとします)。
- ある種のキーフレームアニメーションをそれらに割り当て、タイムコードとその特定の時点でのプロパティの値、およびこれらのフレーム間の補間方法に関する情報を使用して、可変数のキーフレームを指定します。
キーフレームは、時間とプロパティの値の両方について、フレームごとにランダムな値を受け入れることができる必要があります。
この種のシステムの実際的なアプローチは何でしょうか?現在、私はポリモーフィズムについて考えています。パブリックのValueプロパティやGetValue(float time)メソッドを使用して基本クラスまたはインターフェイスを実装し、この基本クラスまたはインターフェイスを実装するStaticValue、RandomValue、BindingValue、AnimatedValueなどのさまざまなサブクラスを作成します。 。ただし、あまりエレガントではないようです。単純なオブジェクトでさえ、初期化は少し面倒になります。
もう1つのアイデアは、これらのプロパティを通常の浮動小数点数またはベクトルと同じように実装し、これらのプロパティにバインドする特別な「修飾子」タイプを作成することです。プロパティの「実際の」値を取得するには、最初にプロパティにバインドされたModifierを呼び出します。これにより、後で取得できるように実際のオブジェクトのプロパティが更新されます。これはおそらく、ある時点でリフレクションを使用することを意味します。これは、1秒間に数十回更新する数千のプロパティがあるため、パフォーマンスにかなり悪影響を与える可能性があります。
これに関する提案はありますか?初心者である私は、(願わくば)私がすでに遊んでいるよりもはるかにエレガントで実用的な解決策を見逃しています:(
編集: おそらく以前にこれについて言及したはずですが、WPFはオプションではありません-すべてのターゲットプラットフォームで利用できるわけではないので、私はそれに頼ることができません。私はその強力なデータバインディングとアニメーション機能を知っていますが、私は自分自身を転がす必要があります(または私のニーズを満たす他の軽量の代替手段を見つける必要があります)。