我创建了一个在桌面模式下工作正常的libgdx游戏,然后我尝试在android平台上运行它。游戏进入菜单屏幕没有任何问题,但是当我点击播放按钮时,游戏关闭"不幸的是,mygame停止了工作"。
我有一个loding屏幕,当它完成加载资产后,它会进入菜单屏幕:
if(assetManager.update()){
game.setScreen(new MenuScreen(game, assetManager));
}
然后在我的菜单屏幕上,我有一个播放按钮,当点击它时会进入游戏屏幕:
ChangeListener listener = new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
//play button
if(actor.equals(playBtn)) {
menuMusic.stop();
game.setScreen(new GameScreen(game, assetManager, settingsPrefs));
}
}
}
在桌面模式下它工作正常但在Android上点击播放按钮我得到这些错误(不是完整的日志):
E/AndroidRuntime: FATAL EXCEPTION: GLThread 4474
java.lang.NoClassDefFoundError: com.myname.mygame.worlds.MyContactListener
E/AndroidGraphics: waiting for pause synchronization took too long; assuming deadlock and killing
错误日志说问题是box2d世界和它的联系人听众,但对我来说这一切都很好。我认为它是ParticleEffect
我有很多这样的我没有正确加载它我只是使用了Gdx.files.internal()
。如何在AssetManager上加载Libgdx ParticleEffect?
有没有办法使应用程序不假设死锁?这样应用程序就不会关闭
更新(我找到导致错误的原因)
所以我试着改变我的代码,因为我教我编写游戏的方式并不是那么好,并且在Android平台上仍然存在同样的问题。游戏运行正常,它进入菜单屏幕,但当你点击播放按钮时,它会崩溃。所以我所做的是在菜单屏幕中添加了一个Box2d世界
world = new World(0f, -10f);
然后当我尝试转换到游戏屏幕时出现同样的错误
FATAL EXCEPTION: GLThread 8739
Process: com.myname.mygame, PID: 12794
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/badlogic/gdx/physics/box2d/World;
一旦我将box2d世界添加到课程中我就得到了错误,问题出现在World类上,那么我怎么知道包含该类的包是否正确安装?还是有其他解决方案?
答案 0 :(得分:0)
正如文件所述: https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/physics/box2d/World.html,
世界只有这个构造函数
World(Vector2 gravity, boolean doSleep)
那么你怎么可能以这种方式创建一个World对象呢?
此外,请查看以下答案:
http://www.badlogicgames.com/forum/viewtopic.php?f=11&t=22311