使用Box2d World

时间:2018-03-16 15:39:41

标签: java android libgdx

我创建了一个在桌面模式下工作正常的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类上,那么我怎么知道包含该类的包是否正确安装?还是有其他解决方案?

1 个答案:

答案 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