我创建了一个 VectorModel(存储矢量数据,如起点和终点)和 VectorView(显示矢量)类。
我想创建两个圆(c1和c2)并在每个圆和鼠标位置(v1和v2)之间显示一个向量,然后只显示最小的向量。(如果鼠标靠近c1,则只显示v1,如果它靠近c2 , 仅显示 v2)。v1 和 v2 是两个 VectorModel 实例。
我想知道是否可以创建单个 VectorView 实例并每次都传递一个 VectorModel 参数。这就是我尝试这样做的方式:
private function enterFrame(e:Event):void
{
//update v1 and v2
_v1.update(_c1.x, _c1.y, mouseX, mouseY);
_v2.update(_c2.x, _c2.y, mouseX, mouseY);
if (_v1.m < _v2.m)
{//display v1
displayVector(_v1);
}else if(_v1.m > _v2.m)
{//display v2
displayVector(_v2);
}
}
private function displayVector(v:VectorModel):void
{
var vView:VectorView = new VectorView(v);
addChild(vView);
}
结果在每个圆圈和鼠标位置之间显示两条线(向量)
我试图通过为每个 VectorModel 创建一个 VectorView 来解决这个问题,尽管出现了以下错误:错误 #1009:无法访问空对象引用的属性或方法。(如何解决这个问题?)
private function enterFrame(e:Event):void
{
//update v1 and v2
_v1.update(_c1.x, _c1.y, mouseX, mouseY);
_v2.update(_c2.x, _c2.y, mouseX, mouseY);
if (_v1.m < _v2.m)
{//display v1
displayVector("v1");
}else if(_v1.m > _v2.m)
{//display v2
displayVector("v2");
}
}
private function displayVector(v:String):void
{
if (v=="v1")
{
addChild(_v1View);
if (_v2View.parent!=null)
{
removeChild(_v2View);
}
}else if(v=="v2")
{
addChild(_v2View);
if (_v1View.parent!=null)
{
removeChild(_v1View);
}
}
}
有更好的方法吗?感谢您的时间和帮助;)