Игра Libgdx вылетает при использовании Box2d World

Я создал игру libgdx, которая отлично работает в режиме рабочего стола, затем я попытался запустить ее на платформе Android. Игра без проблем переходит в экран меню, но когда я нажимаю кнопку воспроизведения, игра закрывается: «К сожалению, mygame перестала работать».

У меня есть экран кодирования, и когда он загружает ресурсы, он переходит на экран меню:

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(). Как загрузить Libgdx ParticleEffect в AssetManager?

есть ли способ, чтобы приложение не переходило в тупик? чтобы приложение не закрывалось

ОБНОВЛЕНИЕ (я нашел причину ошибки)

Итак, я попытался изменить свой код, потому что я учил, что способ, которым я кодировал игру, не так хорош, и все еще есть та же проблема на платформе 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 в класс, я просто получаю сообщение об ошибке, проблема в классе World, так как мне узнать, правильно ли установлен пакет, содержащий класс? или есть другие решения?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
205
1

Ответы 1

Как говорится в документе: 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

Другие вопросы по теме