与this question类似,但我正在寻找Haxe 3.0解决方案。我希望基于一个字符串(来自我的数据文件)实例化一个类。
据我所知,这是正确的。但是,我收到运行时错误
[Fault] exception, information=No such constructor npc.NPC_Squid
Fault, createEnum() at Type.hx:166
Haxe 3代码:
var e = haxe.macro.Expr.ExprDef;
var instance :Dynamic = e.createByName( "npc." + data.character, [] );
//....
我的班级:
package npc;
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.Event;
import openfl.Assets;
class NPC_Squid extends Sprite
{
public function new()
{
super();
addEventListener( Event.ADDED_TO_STAGE, onAdded);
addEventListener( Event.REMOVED_FROM_STAGE, onRemoved);
}
//....
我的包裹似乎是正确的。关于它为什么找不到构造函数的任何想法?
答案 0 :(得分:1)
我想你需要这个:
var myInstance = Type.createInstance(Type.resolveClass("mypackage.MyClass"));
请注意,如果您使用dead-code elimination,则应在某处导入/引用MyClass。 我主要在我的Main类中为这样的事情创建一个函数 forceCompile :
public static function main()
{
forceCompile();
// Wind up all your stuff
}
public static function forceCompile()
{
MyClass;
}
答案 1 :(得分:1)
在我的Haxe 3项目中,我使用:
var easing: IEasing = Type.createEmptyInstance(Type.resolveClass("motion.easing." + easingType + easingStyle));
它完美无缺。一个重要的精度:您需要导入可以这种方式创建的所有类。我确保导入了所有的motion.easing包。
您可以看到完整示例here