Libgdx ClassReflection.newInstance不能使用html版本

时间:2018-06-14 08:43:31

标签: html reflection libgdx

我正在开发一个必须在桌面,Android和网络浏览器上运行的应用程序。

在桌面和Android上我没有问题,一切正常。 但是在HTML版本中,类的新实例不会起作用。我不明白为什么。

这是我的代码:

public static Node newInstanceGdx(Class<? extends Node> nodeModel) throws ReflectionException {
    if (nodeModel != null)
        try {
            return ClassReflection.newInstance(nodeModel);
        } catch (Exception e) {
            e.printStackTrace();
            Gdx.app.setLogLevel(Application.LOG_DEBUG);

            Gdx.app.log("Reflection", "Can't initialize Node class :  " + (Node.class).getName());
        }
    return null
}

这是myGame.gwt.xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit trunk//EN" "http://google-web-toolkit.googlecode.com/svn/trunk/distro-source/core/src/gwt-module.dtd">
<module>
    <source path="fr/EU/Game" />
    <extend-configuration-property name="gdx.reflect.include" value="com.me.reflected.ReflectedClass" />
    <extend-configuration-property name="gdx.reflect.include" value="com.badlogic.gdx.utils.reflect.ClassReflection"/>
    <extend-configuration-property name="gdx.reflect.include" value="com.badlogic.gdx.utils.reflect.ReflectionException"/>

</module>

它总是返回&#34; null&#34;对于html版本,但在另一个版本上,一切正常。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我发现了我的问题,希望能帮助其他人!

GWT需要知道它使用的对象的类型。

因此,当您执行ClassReflection.newInstance(o)时,GWT必须知道“o”类型。

为此,您必须使用以下内容导入* .gwx.xml:

<extend-configuration-property name="gdx.reflect.include" value="path.ClassOfObject"/>

答案 1 :(得分:0)

gdx.reflect.include只对libGDX的内置方法有帮助,比如从jsons反序列化对象。如果你想使用它,你必须查看libGDX源他们正在使用什么样的语句。

我建议你在不是绝对必要的时候远离反思。这是一个很好的解决方案,看起来比使用实现新语句的工厂方法更好,但根据我的经验,您可能会迟早遇到ProGuard和GWT的问题。