在libgdx中部署到Web时isInstance()方法的替换

问题描述 投票:0回答:1

我正在使用libGDX制作游戏,我想使用Gradle将其导出为HTML。当我使用此方法获取演员列表时,问题就来了。显然isInstance()isInstanceOf与GWT不兼容,因此我正在寻找解决此问题的方法。 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;

}
java gradle gwt libgdx
1个回答
0
投票

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;

}
© www.soinside.com 2019 - 2024. All rights reserved.