我尝试在HTML中部署我的libgdx游戏。在台式机和安卓系统中,它运行得很好。当我做./gradlew html:dist
时,它编译得很好,并且我有一个dist文件夹,它是在html文件夹中创建的。我成功地在浏览器上启动了游戏:
然而,当我点击任何改变屏幕的按钮时,游戏崩溃了:
错误是:
GwtApplication: exception:(TypeError):a.ga.b未定义(TypeError):a.ga.b未定义
在控制台中,我有:
错误:未定义java.lang.RuntimeException: com.google.gwt.core.client.JavaScriptException:(TypeError):a.ga.b
-这里是如何更改屏幕的
当用户单击Stats作为示例时,我的代码将执行此操作:
button_stats.addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y){
stage.addAction(Actions.sequence(Actions.fadeOut(0.2f), Actions.run(new Runnable(){
@Override
public void run() {
ScreenManager.getInstance().showScreen(ScreenEnum.STATS);
}
})));
}
});
下面是我的屏幕管理器:
public class ScreenManager {
// Singleton: unique instance
private static ScreenManager instance;
// Reference to game
private SpeedRun2Game game;
// Singleton: private constructor
private ScreenManager() {
super();
}
// Singleton: retrieve instance
public static ScreenManager getInstance() {
if (instance == null) {
instance = new ScreenManager();
}
return instance;
}
// Initialization with the game class
public void initialize(SpeedRun2Game game) {
this.game = game;
}
// Show in the game the screen which enum type is received
public void showScreen(com.gangscred.speedrun2.screens.ScreenEnum screenEnum, Object... params) {
// Get current screen to dispose it
Screen currentScreen = game.getScreen();
// Show new screen
Screen newScreen = screenEnum.getScreen(game , params);
game.setScreen(newScreen);
// Dispose previous screen
if (currentScreen != null) {
currentScreen.dispose();
}
}
}
最后是我的screenEnum:
public enum ScreenEnum {
STATS{
public Screen getScreen(SpeedRun2Game game, Object... params){
return new StatsScreen(game);
}
}
-编辑
我按照gwt编译器的建议添加了style = 'PRETTY‘选项,现在我得到了这个错误:
错误: java.lang.RuntimeException: com.google.gwt.core.client.JavaScriptException:(TypeError):this$static.uniformsthis$static.currProgram是未定义的
发布于 2018-06-14 06:42:24
由于某些原因,在HTML中,你不能在新的Runnable中使用静态方法。因此,当您想要更改屏幕时,您需要删除淡出:
button_stats.addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y){
ScreenManager.getInstance().showScreen(ScreenEnum.STATS);
}
});
或者,您可以保留淡出,但删除静态功能并直接更改屏幕:
SpeedRun2Game game;
...
button_stats.addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y){
stage.addAction(Actions.sequence(Actions.fadeOut(0.2f), Actions.run(new Runnable(){
@Override
public void run() {
game.setScreen(new StatsScreen(game));
}
})));
}
});
https://stackoverflow.com/questions/50835064
复制相似问题