我创建了一个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);
}
}
}
有更好的方法吗? 感谢您的时间和帮助;)