java - 在 libgdx 中部署到 web 时替换 isInstance() 方法
问题描述
我正在使用 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;
}
解决方案
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;
}
推荐阅读
- c# - 在 IEnumerator 协程中设置类变量
- javascript - 从 url 导航页面时,HtmlUnitDriver 不加载 javascript
- php - WooCommerce Rest API:使用图像创建产品
- reactjs - 流星客户端捆绑器错误:找不到模块“反应”
- laravel - Laraadmin 和 sqlite “SHOW”:语法错误(SQL:SHOW TABLES)
- json - 从字符串化 json 的 RDD 的行中获取键和值
- javascript - 如何将当前范围传递给函数引用?
- c# - 为什么 ANTLR 生成的解析器会重用上下文对象?
- xamarin.forms - Xamarin Listview 不显示可观察的集合
- extjs - Sencha extjs 日期字段。单击今天按钮与选择日期的行为不同