将String解释为函数名称 - ActionScript 3.0

时间:2011-11-01 17:24:56

标签: actionscript-3

我正在为大学任务开发游戏,我想创建一个处理fla文件库中所有资源的类。我用OO PHP开发网站近4年,所以我有编程经验,但我是AS3的新手。

资产处理程序类:

package library {
    public class AssetHandler {
        public var stageWidth: int;
        public var stageHeight: int;

        public function AssetHandler(sw:int, sh:int):void {
            stageWidth = sw;
            stageHeight = sh;
        }
        //Convert asset to bitmap
        public function bm(AssetsName:String):Object {
            var a:Object = new AssetsName(stageWidth, stageHeight);
            return new Bitmap(a);
        }

    }
}

Main.fla中引用的主类

package {
    import flash.display.*;
    import library.AssetHandler;

    public class Main extends Sprite {
        private var cannon:Cannon = new Cannon();
        private var holder:Holder = new Holder();
            //I want to replace this
        public var bdata = new Char(stage.stageWidth, stage.stageHeight);
        public var char = new Bitmap(bdata);
            //into this
            public var asset = new AssetHandler(stage.stageWidth, stage.stageHeight);
            public var char = asset.bm("Char");

        private var cannonAngle:Number;

        public function Main() {
                }
        }
}

在php中你可以很容易地做$ Class-> $ name(); AS3中是否有类似的方法?

我收到错误: 1180:调用可能未定义的方法AssetsName。 1180:调用可能未定义的方法Bitmap。

我认为由于可见性而未找到Bitmap方法,但我该如何解决? 谢谢!

2 个答案:

答案 0 :(得分:3)

1180: Call to a possibly undefined method Bitmap.

您需要导入flash.display.Bitmap

1180: Call to a possibly undefined method AssetsName.

如果我没记错的话,你实际上不能像你正在做的那样从String引用中实例化一个类。但是,您可以使用字符串引用执行getDefinitionByName,并以这种方式实例化类。

public function bm(AssetsName:String):Object {
    var classdef:Class = getDefinitionByName(AssetsName) as Class;
    var a:Object = new classdef(stageWidth, stageHeight);
    return new Bitmap(a);
}

(我认为这是正确的。可能会有一些错误。)(编辑:有 - 错过了“作为班级”部分。)

祝你好运。

答案 1 :(得分:1)

我认为你需要这样的东西

如果你需要按字符串引用类:

import flash.utils.getDefinitionByName;
.....
var ClassReference:Class = getDefinitionByName("YourClass") as Class;

如果你想通过字符串调用函数:

var functionName:String = "testFunction";
this[functionName]("hello!");

public function testFunction(param:String):void {
    trace(param);
}

希望这对你有所帮助。

<强>更新

PHP's $Class->$name() may be assumed as classInstance["name"](); in ActionScript