Actionscript 3 如何引用拥有另一个类的类的实例?
我有一个带有属性摄影机的Map类,属性摄影机是另一个自定义类MapCamera 地图摄影机有五个属性: _x _y map-对拥有此MapCamera的map实例的引用 抵销 越位 如何引用拥有此MapCamera的Map实例 Map.as:Actionscript 3 如何引用拥有另一个类的类的实例?,actionscript-3,flash,class,Actionscript 3,Flash,Class,我有一个带有属性摄影机的Map类,属性摄影机是另一个自定义类MapCamera 地图摄影机有五个属性: _x _y map-对拥有此MapCamera的map实例的引用 抵销 越位 如何引用拥有此MapCamera的Map实例 Map.as: package { import MapCamera; import flash.display.Sprite; public class Map extends Sprite { public var ca
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列:将Class类型的值隐式强制为不相关的Map类型。如果我理解正确,请在创建Map时尝试将实例化的Map对象作为引用传递到MAPCAMERA类中 你的问题是当你打电话的时候
public var camera:MapCamera = new MapCamera(this);
您尚未实际创建该类的实例。Actionscript将在运行构造函数之前创建类全局对象,以便在构造函数运行时可以使用所需的对象
在这种情况下,您必须将代码移动到Map构造函数中,否则您将只将类引用传递给摄影机,而不是其实例
public function MapCamera(m:Map)
函数调用不会给您一个错误,因为m是作为类传递的,无论您传递的是类还是它的实例,m:Map当然会接受它,因为它们都是有效的。试着调试代码,看看当您试图调用MapCamera构造函数时m是什么样子(只需在那里设置一个断点)。差别将变得明显
当然,这样做是完全有效的,例如,如果您希望动态创建现有类对象的实例,并传递类而不是构造函数
改为这样做:
public var camera:MapCamera;
public function Map()
{
camera = new MapCamera(this);
}