我正在用Kotlin开发一个简单的游戏,使用LibGDX在后台播放音乐。在Android上,当用户玩游戏并按下HOME键,然后再次继续游戏时,我的暂停屏幕出现了——音乐继续播放。我想要的是,每当我的暂停屏幕显示时,音乐总是关闭。
当我开始一个新游戏时,每当我按下游戏中的“暂停”按钮,音乐就会按预期停止——然后当我点击游戏中的“继续”按钮时,音乐就会重新开始。这工作得很好。只有在按下HOME键时,我才会有问题。
我在LibGDX文档中找到了这个JavaDoc注释:https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/audio/Music.html
当应用程序暂停或恢复时,音乐实例会自动暂停和恢复。请参阅应用程序侦听器。
这不是我想要的行为,但我不知道如何阻止它。我试图在应用程序恢复时停止音乐,但这些似乎都没有产生任何影响 - 音乐总是播放。
我使用一个资产类,遵循这里的建议:libgdx:加载游戏中所有资产的最佳方式
这是我的资产类:
class Assets {
. . .
private val manager = AssetManager()
lateinit var backgroundMusic: Music
. . .
fun load() {
manager.load(BACKGROUND_MUSIC_FILENAME, Music::class.java)
}
fun finishLoading() {
// Wait for all loading to finish
manager.finishLoading()
. . .
backgroundMusic = manager.get(BACKGROUND_MUSIC_FILENAME)
}
fun startBackgroundMusic() {
if (Preferences.musicEnabled) {
backgroundMusic.isLooping = true
backgroundMusic.volume = 1f
backgroundMusic.play()
}
}
fun stopBackgroundMusic() {
backgroundMusic.stop()
}
. . .
}
我的主要切入点如下所示:
class GameEntrypoint : Game(), ScreenSwitcher {
private val assets = Assets()
override fun create() {
// Start loading assets
assets.load()
// Wait until all assets have loaded
assets.finishLoading()
. . .
mainMenuScreen = MainMenuScreen(assets, this, this.penguinGame)
setScreen(mainMenuScreen)
}
这是我的< code >游戏屏幕,当应用暂停时,我会切换到< code >暂停屏幕:
class GameScreen(private val assets: Assets, private val screenSwitcher: ScreenSwitcher, . . .) : Screen,
InputProcessor {
init {
. . .
val btnPause = ImageButton(TextureRegionDrawable(assets.imagesTextureAtlas.findRegion(Assets.BUTTON_PAUSE_REGION)))
Gui.addClickListener(btnPause) {
// Pause button clicked - pause the game then show pause screen
pauseTheGame()
}
. . .
}
private fun pauseTheGame() {
assets.stopBackgroundMusic()
penguinGame.pauseGame()
screenSwitcher.setScreen(pauseScreen)
}
. . .
}
我尝试在以下地方调用assets.stopBackgroundMusic()
:
游戏入口点
的简历()
暂停屏幕
的简历()
中屏幕
的显示()
游戏屏幕暂停游戏
时我没有想法。任何帮助或想法非常感谢!
我已经找到了几种方法来解决此问题。
这是由com.badlogic.gdx.backends.android.AndroidApplication
中的以下代码引起的:
@Override
protected void onResume () {
. . .
this.isWaitingForAudio = true;
if (this.wasFocusChanged == 1 || this.wasFocusChanged == -1) {
this.audio.resume(); // <--- here !!
this.isWaitingForAudio = false;
}
super.onResume();
}
如你所见,音频总是恢复。为什么?我不知道。
因此,要解决这个问题,您可以执行以下操作之一:
AndroidLauncher
: override fun onResume() {
super.onResume()
// Work-around to prevent LibGDX from *always* restarting background music after resume
this.audio.pause()
}
这将在super.resume()
中再次打开音乐后立即关闭音乐。
override fun create() {
. . .
// Don't play any music from when the app was last resumed
assets.stopBackgroundMusic()
}
我仍然想知道为什么LibGDX会这样。
我正在构建具有恢复/暂停功能的m4a录制的Android应用程序。可能吗?如果是,请告诉我解决方案。 谢谢
在一个android应用中,我编写了一个在后台播放音乐的服务。我已经实现了来监听音频焦点的更改。问题是,在以下情况下,我没有收到对的回调。 > 在我的应用程序中播放音乐,并将应用程序放在后台。(背景不断播放音乐)。 启动youtube应用程序,播放任何视频。这将回调,在此我暂停媒体播放器。 现在我为youtube按home键(youtube停止播放)。
我正在用场景构建器创建一个JavaFX应用程序。我在开头加了一段视频。所以我想播放视频之前,我的应用程序启动在全屏模式。问题是当它停止时,我只看到黑色尖叫,什么也没发生,我想这是因为视频是全屏的,它没有自动关闭。 我也有一个bug,在视频开始之前,我的主窗口的一些闪烁。我想这是因为视频放在控制器中,在我的应用程序启动后开始。 公共类主扩展应用程序{ 控制器类:
我必须实现创建暂停和恢复状态音频的应用程序,当我的应用程序作为启动时,音频是启动的,当我按下模拟器上的后退按钮时,音频音乐处于暂停状态,但当我的活动从停止状态返回前台时,我的音频音乐不会恢复。这是我的密码。
我想让应用程序恢复音乐当我们回到应用程序时,我尝试过使用方法,但服务中没有方法。TIA
问题内容: 我声明我已阅读有关线程的内容,但从未使用过。所以我问你:) 我有两个线程:和,其中管理GUI和逻辑。 我将从开始。 然后在绘制GUI时,我将其暂停,以等待到达X点的run方法。 当到达X点进入run方法时,我暂停并继续。 并共享一些变量来管理GUI和逻辑… 我可以做吗?如果是,如何?:) 问题答案: 使用和方法: -使当前线程等待,直到另一个线程调用 该对象的方法。 -唤醒正在该对象的