좋아, 그래서 오픈 소스 라이브러리를 쓰고 있어요. 이 라이브러리의 섹션에서는 2 차원 및 3 차원 공간에서 엔티티를 이동시켜 회전, 위치 등을 조작하는 함수를 처리합니다.도서관 디자인의 곤란
이제는 다른 라이브러리와 특히 잘 작동하도록하고 싶습니다. 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);
}
을이처럼 사용할 수있다 : 나는 클라이언트 코드로, 현실 I에 그를 추가해야
rotate(4,modelFunction2,myPoint)
//or
rotate(4,modelFunction1,mySprite);
, 원 회전 기능을 직접 호출 할 수 없습니다. 대신에 전달하고자하는 rotate 함수는 클래스 멤버로 어딘가에 저장 한 다음 rotate 함수에 의해 호출되어야합니다. 위와 같이 작성하는 코드가 적습니다.
캐스팅과 퍼포먼스가 성능에 미치는 영향이 걱정 스럽지만 (이것은 괜찮을 것입니다.) 다른 사람이 대안을 제안하거나 내가 가장 논리적 인 해결책을 제시 할 수 있습니까? 감사합니다 :)
이것은 정확히 내가 본 것입니다. 감사 :) – Allan