Libgdx HTML5 AnimationScheduler Длина равна нулю - PullRequest
0 голосов
/ 22 февраля 2019

Я создал игру libdx, и она отлично работает в версиях Android и Desktop.В игре у меня летит птица, и я должен избегать других объектов.Если он соприкасается с объектами, игра окончена, и появляется экран «окончен».

В моем приложении GWT при первом появлении экрана «игра поверх» у меня нет проблем, но если я перезагружаю игру и играю снова, я получаю сообщение об ошибке: enter image description here

В консоли Google Chrome ошибка возникает в строке «throw new RuntimeException(t)» javascript.Я менее знаком с Javascript.Кто-нибудь сталкивался с подобной проблемой раньше с планировщиком анимации?

AnimationScheduler.get().requestAnimationFrame(new AnimationCallback() {
			@Override
			public void execute (double timestamp) {
				try {
					mainLoop();
				} catch (Throwable t) {
					error("GwtApplication", "exception: " + t.getMessage(), t);
					throw new RuntimeException(t);
				}
				AnimationScheduler.get().requestAnimationFrame(this, graphics.canvas);
			}
		}, graphics.canvas);
	}

В моем базовом коде Libgdx следующий код строки вызывается, когда птица падает и игра заканчивается, так что, вероятно, там, где происходит ошибка:

 Gdx.app.postRunnable(new Runnable() {

            @Override
            public void run() {
                Sounds.gameOverSound.play(SettingsManager.gameVolume);
                highScore.stopCounting();
                for (Dodgeable dodgeable : dodgeables.activeDodgeables) {
                    dodgeable.reset();
                }
                dodgeables.resetSpawnTimes();
                for (Sound sound : Sounds.activeSounds){
                    //Stop all sounds currently playing
                    sound.stop();
                    Sounds.activeSounds.remove(sound);
                }
                //Reset all notifications that are active so they stop displaying
                Notifications.ExclamationMark.resetNotifications();
                Array<Body> bodies = new Array<Body>();
                world.getBodies(bodies);
                for (int i = 0; i < bodies.size; i++) {
                    world.destroyBody(bodies.get(i));
                }
                dispose();
                game.setScreen(new GameOverScreen(game, playServices, databaseAndPreferenceManager, highScore));
            }
        });

1 Ответ

0 голосов
/ 23 февраля 2019

Решено ... оказывается, в моем методе "dispose ()" я избавлялся от звука из другого класса и не воссоздал его.Поэтому я выбрасывал нулевой звук, который вызывал ошибку.

...