gpt4 book ai didi

java - libgdx Screen - 如何通过字符串设置新屏幕

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:08 24 4
gpt4 key购买 nike

我正在尝试通过字符串设置一个新屏幕。我可以使用 Class.forName(ScreenString) ,这很酷,但函数 game.setScreen() 似乎有一些问题。

我在这里做的是:

 Class<?> temp = null;
if(something) try {
temp = Class.forName("string1"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if(something else) try {
temp = Class.forName("string2"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
game.setScreen(new temp());

但我显然有一些语法问题,因为它告诉我找不到“temp”。我哪里错了?

最佳答案

您需要 forName 方法的完全限定名称。您无法调用new temp()。该语法表示您想要一个不存在的类 temp 的实例。 temp 是一个变量。如果您的类有一个无参构造函数,您可以使用以下方法实例化它:

Screen screen = temp.newInstance();

如果您需要传递一些参数,请创建一个所有级别都扩展的父类(super class):

public class MyScreen extends Screen {

Game game;

public void init (Game game){
this.game = game;
}
}

现在按名称加载关卡。请注意,forName 需要一个完全限定名称,因此您必须添加包名称。

public void loadLevelScreen (String name) {
String packageName = getPackage().getName();
Class<? extends MyScreen> screenClass = null;
try {
screenClass = Class.forName(packageName + "." + name).asSubclass(MyScreen.class);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

try {
MyScreen screen = screenClass.newInstance();
screen.init(this.game);
setScreen(screen);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}

关于java - libgdx Screen - 如何通过字符串设置新屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32747589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com