使用sprite类在as3中使用GetDefinition

时间:2013-11-07 10:35:19

标签: actionscript-3 flash

我有一个问题。我已经能够使用as3isolib库(IsoSprites)成功运行我的游戏,但是当我在互联网上搜索时,IsoSprites没有hitTestObject或hitTextPoint功能。所以,我将IsoSprites更改为Sprite,但是当我已经将IsoSprites更改为Sprite时,我收到此错误:

  

1119:通过a访问可能未定义的属性sprite   带静态类型的引用flash.display:Sprite。

指出:

  

Constant.dudeEfis.sprites = [efisFrontClass];

     

dudeEfis是Sprite

我知道Sprite没有以下功能:

  

dudeEfis.sprites

但问题是,如果我将“dudeEfis”更改为IsoSprite,我将无法获取hitTestObject或hitTestPoint。如果我改为Sprite,我就会收到这个错误。我该如何解决?我给你的代码是移动面方向(当玩家面向南方时,角色也是如此)

以下是代码:

public static var loaderEfis:Loader;
public static var dudeEfis:Sprite; //public static var dudeEfis:IsoSprite;
public static var _numXEfis:Number = 0;
public static var _numYEfis:Number = 0;

Constant.loaderEfis = new Loader();

Constant.loaderEfis.load(new URLRequest("efis.swf"));

var efisFrontClass:Class = Constant.loaderEfis.contentLoaderInfo.applicationDomain.getDefinition("EfisFront") as Class;

if (Constant._numXEfis == 0 && Constant._numYEfis == 0)
{
    Constant._numXEfis = Constant.dudeEfis.x;
    Constant._numYEfis = Constant.dudeEfis.y;

    Constant.dudeEfis.sprites = [efisFrontClass];
}

任何帮助将不胜感激!提前谢谢!

1 个答案:

答案 0 :(得分:0)

听起来你已经知道问题所在。解决此问题的一种方法是创建自己的类,扩展IsoSprite类,然后自己添加hitTestObjecthitTestPoint方法,它们很容易实现。

package {
    import flash.display.DisplayObject;
    import flash.geom.Point;

    public class MyOwnSprite extends IsoSprite {
        public function hitTestObject (object:DisplayObject):Boolean {
            //some logic here
        }

        public function hitTestPoint (point:Point):Boolean {
            //some logic here
        }
    }
}

通过这种方式,您可以保留IsoSprite的所有功能,同时拥有您需要的这两种方法。