2013-12-14 79 views
0

我有一个带有属性相机的Map类,它是另一个自定义类MapCamera。如何引用拥有另一个类的类的实例?

的MapCamera有五个属性:

_x

_y

地图 - 到地图拥有此MapCamera

OFFSETX

OFFSETY

实例的引用我如何参考拥有此MapCamera的Map实例?

Map.as:

package { 

    import MapCamera; 
    import flash.display.Sprite; 

    public class Map extends Sprite { 

     public var camera:MapCamera = new MapCamera(this); 

     public function Map() { 
      // constructor code 
      } 

    } 

} 

MapCamera.as:

package { 

    import Map; 

    public class MapCamera { 

     private var _x:Number; 
     private var _y:Number; 
     public var map:Map // a reference to the instance of Map owning this MapCamera 
     public var offsetX:Number; 
     public var offsetY:Number; 

     public function get x():Number{ return _x; } 
     public function get y():Number{ return _y; } 

     public function set x(n:Number):void 
     { 
      _x = n; 
      map.x = -(_x + offsetX); 
     } 

     public function set y(n:Number):void 
     { 
      _y = n; 
     map.y = -(_y + offsetY); 
     } 

     public function MapCamera(m:Map) { 
      // constructor code 
      map = m; 
     } 

    } 

} 

,但我得到这个错误: Map.as,8号线,47列1067:值隐式强制将类输入到不相关的类型映射中。

回答

0

如果我理解正确,当您创建MAP时,尝试将实例化的MAP对象作为参考传递给MAPCAMERA类。这里

你的问题还真是,当你调用

public var camera:MapCamera = new MapCamera(this); 

您还没有实际创建类的实例呢。 Actionscript将在运行构造函数之前创建类全局对象,以便在构造函数运行时提供所需的对象。

在这种情况下,您必须将代码移动到Map构造函数中,否则您只会将CLASS引用传递给您的相机,而不是其实例。由于M为一类过去了,不管你通过类或它的实例米

public function MapCamera(m:Map) 

函数调用不会给你一个错误:地图,当然会接受,因为它们都是有效的。尝试调试您的代码,并查看当您尝试调用MapCamera构造函数时的样子(仅在那里设置断点)。差异将变得明显。

这样做当然是完全有效的,例如,如果要动态创建现有类对象的实例并传递类而不是构造函数。

而是执行此操作:

public var camera:MapCamera; 

public function Map() 
{ 
     camera = new MapCamera(this); 
} 
相关问题