我有一个带有属性相机的Map类,它是另一个自定义类MapCamera。
MapCamera有五个属性:
_x
_y
map - 对拥有此MapCamera的Map实例的引用
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:将类型Class的值隐式强制转换为不相关的类型Map。
答案 0 :(得分:0)
如果我理解正确,您尝试在创建MAP时将实例化的MAP对象作为引用传递给MAPCAMERA类。
你的问题在于,当你打电话时
public var camera:MapCamera = new MapCamera(this);
您尚未实际创建该类的实例。 Actionscript将在运行构造函数之前创建类全局对象,以便在构造函数运行时可以使用所需的对象。
在这种情况下,您必须将代码移动到Map构造函数中,否则您只会将CLASS引用传递给您的相机,而不是它的实例。
public function MapCamera(m:Map)
函数调用不会给你一个错误,因为m作为一个类传递,无论你传递类或它的实例m:Map当然会接受它,因为它们都是有效的。尝试调试代码并查看当您尝试调用MapCamera构造函数时m看起来的样子(只需在那里设置断点)。差异将变得明显。
这样做当然是完全有效的,例如,如果你想动态创建现有类对象的实例并传递类而不是构造函数。
请改为:
public var camera:MapCamera;
public function Map()
{
camera = new MapCamera(this);
}