1

我创建了一个 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);
        }
   }
}

有更好的方法吗?感谢您的时间和帮助;)

4

0 回答 0