Как добавить mp3 в сцену графического интерфейса scalafx?

Я пытаюсь добавить mp3 в свой графический интерфейс scala с помощью scalafx, но у меня проблемы с добавлением в сцену.

это то, что у меня есть, но это не работает...

val gameStage = new PrimaryStage {

  title = "Game Graphics"
  scene = new Scene(windowWidth, windowHeight) {
    var audio = new Media(url)
    var mediaPlayer = new MediaPlayer(audio)
    mediaPlayer.volume = 100
    mediaPlayer.play()
  }
}

person YangLiang Lu    schedule 05.04.2019    source источник
comment
Привет! У вас была возможность просмотреть мой ответ и попробовать решение? Если это так, и это сработало для вас, я был бы признателен, если бы вы могли отметить мой ответ как правильный, щелкнув серую галочку в левом верхнем углу моего ответа. Если нет, пожалуйста, дайте мне знать, и я постараюсь помочь вам в дальнейшем.   -  person Mike Allen    schedule 08.04.2019
comment
Мой плохой, просто новичок в stackoverflow...   -  person YangLiang Lu    schedule 10.04.2019
comment
Не волнуйтесь. ;-) Рад, что это сработало для вас!   -  person Mike Allen    schedule 11.04.2019


Ответы (1)


Похоже, одна из проблем заключается в том, что вы не использовали экземпляр MediaView для добавления MediaPlayer в сцену. Кроме того, вероятно, будет лучше, если вы не начнете воспроизводить медиа, пока сцена не будет отображена.

Я думаю, вам нужно что-то вроде этого (как полное приложение):

import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene.{Group, Scene}
import scalafx.scene.media.{Media, MediaPlayer, MediaView}

object GameGraphics
extends JFXApp {

  // Required info. Populate as necessary...
  val url = ???
  val windowWidth = ???
  val windowHeight = ???

  // Initialize the media and media player elements.
  val audio = new Media(url)
  val mediaPlayer = new MediaPlayer(audio)
  mediaPlayer.volume = 100

  // The primary stage is best defined as the stage member of the application.
  stage = new PrimaryStage {

    title = "Game Graphics"
    width = windowWidth
    height = windowHeight
    scene = new Scene {

      // Create a MediaView instance of the media player, and add it to the scene. (It needs
      // to be the child of a Group, or the child of a subclass of Group).
      val mediaView = new MediaView(mediaPlayer)
      root = new Group(mediaView)
    }

    // Now play the media.
    mediaPlayer.play()
  }
}

Кроме того, вам следует предпочесть val var, особенно если нет необходимости изменять связанные переменные после того, как они были определены.

Кстати, протестировать код невозможно, поэтому рассмотрите возможность публикации минимального, полного и поддающегося проверке примера в следующий раз.

person Mike Allen    schedule 05.04.2019