[英]Java / Libgdx LwjglApplicationConfiguration backgroundFPS doesn't work
[英]Music streaming in libgdx doesn't work (JAVA)
因此,我一直在從事libGDX項目,並且在這里遇到了一個問題:
public class Main extends ApplicationAdapter implements Screen {
(...)
@Override
public void create() {
(...)
//Starts playing Main theme Music
MusicPlayer.determineMusic(mainTheme, splash);
}
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
//was:
//splash.splashRenderer(mainTheme, batch, splashSprite);
//changed to:
splash.splashRenderer(batch, splashSprite);
batch.end();
System.out.println("******************End of Render******************");
}
public class SplashScreen {
Music gameTheme ;
public SplashScreen(){
}
public void splashRenderer(SpriteBatch batch, Sprite splashSprite) {
batch.draw(splashSprite, 0, 0, MyConstants.WINDOW_WIDTH, MyConstants.WINDOW_HEIGHT);
}
@Override
public void show() {
//gameTheme = Gdx.audio.newMusic(Gdx.files.internal("blah.mp3"));
//gameTheme.play();
}
@Override
public void hide() {
//gameTheme.dispose();
}
@Override
public void dispose() {
//gameTheme.dispose();
}
}
public class MusicPlayer {
protected MusicPlayer(){
}
public static void determineMusic(Music Theme, AbstractScreen screen){
if ((screen instanceof GameScreen) == false){
Theme.play();
}
}
}
到目前為止,代碼基本上只加載了一個音樂文件和一個精靈,並通過splashRenderer方法將其繪制在屏幕上,但是我的問題是音樂沒有開始。 任何幫助將不勝感激。 提前致謝。
EDIT1〜我實現了Screen,將方法更改為splashRenderer(SpriteBatch,Sprite)並在show方法中加載和播放音樂文件,並在hide和dispose方法中將其dispose()。 我沒有添加任何東西到pause()方法,因為我認為它是自動完成的。
EDIT2〜我注意到這一次音樂也沒有開始。 我想出的解決方案是制作一個新類MusicPlayer(),該類將確定是否播放以及播放哪個曲目。 首先在create()中顯式調用musicPlayer,並且可能在處理mouseEvents時在需要時對其進行調用。
請提供有關這些更改的反饋(好的/壞的/為此要避免的原因等)。 謝謝!
我做了以下事情:
public abstract class BaseScreen implements Screen, InputProcessor
{
public BaseScreen()
{
windowWidth = Gdx.graphics.getWidth();
windowHeight = Gdx.graphics.getHeight();
AudioManager.getScreenThemes().put(this, getScreenMusic());
}
public void pause()
{
AudioManager.pause();
}
public void resume()
{
AudioManager.play();
}
public void show()
{
Gdx.input.setInputProcessor(this);
AudioManager.switchMusic(this);
}
public abstract Music getScreenMusic();
...
}
另一個屏幕:
@Override
public Music getScreenMusic()
{
return Resources.soundGameTheme;
}
AudioManager:
static
{
screenThemes = new HashMap<Screen, Music>();
currentlyPlayed = null;
}
public static boolean getSoundEnabled()
{
return MyGame.getPreferences().getBoolean(Resources.soundEnabledKey);
}
private static Map<Screen, Music> screenThemes;
public static Music currentlyPlayed;
public static void play()
{
if(getSoundEnabled() != false)
{
if(currentlyPlayed != null)
{
if(currentlyPlayed.isPlaying() == false)
{
currentlyPlayed.play();
}
}
}
}
public static void initialize()
{
Resources.soundMainMenuTheme = Gdx.audio.newMusic(Gdx.files.internal("data/main_menu.mp3"));
Resources.soundGameTheme = Gdx.audio.newMusic(Gdx.files.internal("data/game.mp3"));
Resources.soundMainMenuTheme.setLooping(true);
Resources.soundGameTheme.setLooping(true);
}
public static void stop()
{
if(currentlyPlayed != null)
{
if(currentlyPlayed.isPlaying() == true)
{
currentlyPlayed.stop();
}
}
}
public static void pause()
{
if(getSoundEnabled() != false)
{
if(currentlyPlayed != null)
{
if(currentlyPlayed.isPlaying() == true)
{
currentlyPlayed.pause();
}
}
}
}
public static void switchMusic(Screen screen)
{
if(screenThemes.get(screen) != currentlyPlayed)
{
if(screenThemes.get(screen) != null)
{
stop();
currentlyPlayed = screenThemes.get(screen);
play();
}
}
}
public static void dispose()
{
Resources.soundMainMenuTheme.dispose();
Resources.soundGameTheme.dispose();
screenThemes = null;
}
public static Map<Screen, Music> getScreenThemes()
{
return screenThemes;
}
我承認,這不是最漂亮的東西-我應該使用某種枚舉之類的單例,而不是以這種方式使其靜態。 但這確實有效,盡管當您導航到特定的Screen
時它基本上會播放特定的歌曲,並且如果要在屏幕上播放的歌曲不同,則可以更改歌曲。
編輯:
首選項:
public class MyGame extends Game
{
private static Preferences preferences;
@Override
public void create()
{
...
preferences = Gdx.app.getPreferences(Resources.preferencesName);
...
}
public static Preferences getPreferences()
{
return preferences;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.