首页 > 解决方案 > 在 libgdx 中部署到 web 时替换 isInstance() 方法

问题描述

我正在使用 libGDX 制作一个游戏,我想使用 Gradle 将其导出为 HTML。当我使用此方法获取演员列表时,问题就来了。显然isInstance()isInstanceOfGWT 不兼容,所以我正在寻找一种方法来解决这个问题。Gradle 告诉我isInstance没有定义。它在桌面上运行良好。

public static ArrayList<BaseActor> getList(Stage stage, String className) {
    ArrayList<BaseActor> list = new ArrayList<BaseActor>();

    Class theClass = null;
    try {
        theClass = ClassReflection.forName("com.mygdx.game.actors." + className);
    } catch (Exception error) {
        error.printStackTrace();
    }

    for (Actor a : stage.getActors()) {
        if (theClass.isInstance(a))
            list.add((BaseActor) a);

    }
        return list;

}

标签: javagradlegwtlibgdx

解决方案


Actor 类有一个用户对象属性 ( getUserObject()/ setUserObject()),您可以使用它来附加数据。您可以让您的 BaseActor 将其用作类标记属性,并使用抽象方法,这样您就不会忘记将其添加到您的任何 Actor 实现中。

abstract class BaseActor {

    //...

    public BaseActor() {
        setUserObject(getClassTag());
        //...
    }

    protected abstract String getClassTag();

}
class SomeSpecificActor extends BaseActor {

    public SomeSpecificActor () {
        super();
        //...
    }

    @Override 
    protected String getClassTag() {
        return "SomeSpecificActor";
    }
}
public static ArrayList<BaseActor> getList(Stage stage, String classTag) {
    ArrayList<BaseActor> list = new ArrayList<BaseActor>();

    for (Actor a : stage.getActors()) {
        if (classTag.equals(a.getUserObject()))
            list.add((BaseActor) a);
    }
    return list;

}

推荐阅读