Хорошо, поэтому я пишу библиотеку с открытым исходным кодом. Раздел этой библиотеки посвящен перемещению объекта в двух- и трехмерном пространстве, поэтому он будет иметь функции, которые управляют вращением, положением и т. Д.
Теперь, в идеале, я хотел бы, чтобы моя библиотека хорошо работала с другими библиотеками, в частности с такими вещами, как Papervision3D и другими механизмами Flash 3D, но не забывая об основных объектах изображений, таких как Sprite или Movieclip.
Так что это мое затруднение. Функции, которые будут манипулировать сущностью, также должны будут изменять значения данных базовой модели (например, объект Sprite, Papervision и т. Д.). Каков наилучший способ сделать мою библиотеку гибкой, чтобы она могла поддерживать несколько моделей данных. Производительность также является важным аспектом.
В настоящее время я думаю о чем-то вроде этого:
//this is the public function that I expose in my library
public function rotate(val:Number,func:Function,objData:*):void
{
func(val,objData);
}
//example of a function that could be passed in
//this one will rotate a MovieClip
private function modelFunction1(rot:Number,objData:*):void
{
var myMov:MovieClip = objData as MovieClip;
myMov.rotation = rot;
}
//second example of a function that could be pass in
//this one will rotate a point
private function modelFunction2(rot:Number,objData:*):void
{
//yes I know this piece of code makes no sense :P
var p:Point = objData as Point;
p.x = Math.cos(rot);
p.y = Math.sin(rot);
}
так что тогда его можно использовать как:
rotate(4,modelFunction2,myPoint)
//or
rotate(4,modelFunction1,mySprite);
Я должен добавить, что в действительности я, как клиентский код, не смогу напрямую вызывать функцию поворота. Вместо этого, функция поворота, которую я хочу передать, должна быть где-то сохранена как член класса, а затем вызвана функцией поворота. Это просто меньше кода для меня, чтобы написать его, как указано выше.
Это мне кажется довольно гибким, хотя влияние производительности на приведение и передачу функций касается меня (но может быть в порядке). Может кто-нибудь еще предложить альтернативу или это то, что у меня есть наиболее логичное решение. Спасибо:)