Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何引用拥有另一个类的类的实例?_Actionscript 3_Flash_Class - Fatal编程技术网

Actionscript 3 如何引用拥有另一个类的类的实例?

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

我有一个带有属性摄影机的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 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);
}