В настоящее время я пытаюсь анимировать несколько открытых свойств определенных объектов.Обычно они имеют тип float или векторы с плавающей точкой (тип известен во время компиляции).Я хочу иметь возможность:
- назначить им статическое значение (MyObject.Duration = 10f;) или
- назначить им случайное значение, указав минимальное и максимальное значенияи, необязательно, также вес (MyObject.Duration = new RandomFloat (5f, 20f, 2f);) или
- «связывают» это свойство со свойством другого объекта (представьте, что дочерний объект связывает некоторые из его свойствего родительскому объекту, такому как его цвет или размер или sth.) или
- присваивает им вид анимации ключевого кадра, определяя переменное число ключевых кадров с временным кодом и значение свойства в этот конкретный момент временикак информация о том, как интерполировать между этими кадрами
Ключевые кадры должны иметь возможность принимать случайные значения для каждого кадра, как для времени, так и для значения свойства.
Что будетпрактический подход для такого рода системы?В настоящее время я думаю о полиморфизме: реализовать базовый класс или интерфейс с открытым методом Value-property и / или GetValue (float time), а затем создать различные подклассы, такие как StaticValue, RandomValue, BindingValue и AnimatedValue, реализующие этот базовый класс или интерфейс,Хотя это не выглядит очень элегантно, и инициализация даже простых объектов становится немного утомительной.
Другая идея состоит в том, чтобы реализовать эти свойства так же, как обычные числа с плавающей точкой или векторы, и создать специальную привязку типа «Модификатор»к этим свойствам.Чтобы получить «реальное» значение свойства, я бы сначала вызвал любой Модификатор, связанный со свойством, который, в свою очередь, обновил бы фактическое свойство объекта, чтобы я мог получить его позже.Скорее всего, это будет означать использование отражения в какой-то момент, что может ухудшить производительность, поскольку у меня, вероятно, будут тысячи свойств для обновления десятки раз в секунду.
Есть предложения по этому поводу?Будучи новичком, я (надеюсь) упускаю какое-то гораздо более изящное и / или практичное решение, чем уже играю: (
Редактировать: Вероятно, следовало упомянуть об этом раньше,но WPF не вариант - он доступен не на всех целевых платформах, поэтому я не могу положиться на него. Я знаю о его мощных возможностях привязки данных и анимации, но мне нужно свернуть свои собственные (или найти какой-то другой легкийальтернативное удовлетворение моих потребностей).