0

所以我想得到一个我正在制作的游戏,当我打开它时开始播放音乐。我以前从来没有做过这样的事情,所以我想知道一些建议。考虑到我是菜鸟,我在网上找不到任何可以理解的东西,所以如果你能做到这一点并很好地解释它,那就太棒了。谢谢!哦,我可以在程序上发布您需要的任何信息。

主类看起来像:

package com.game.main.window;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import java.awt.event.ActionListener;

public abstract class Main extends JFrame implements ActionListener {

public static JFrame frame = new JFrame();

public static void main(String[] args) {
    createWindow();
}

public static void createWindow() {
    ImagePanel panel = new ImagePanel(
            new ImageIcon(
                    "C:\\Users\\Austin\\Pictures\\My Pictures\\Le Parkour\\ABC0001.jpg")
                    .getImage());

    frame.getContentPane().add(panel);
    frame.setJMenuBar(MenuBar.menuBarCreator());
    frame.pack();
    frame.setTitle("*Game Title* Beta 0.0.1 ADMINISTRATOR VERSION");
    frame.setSize(ImagePanel.img.getWidth(null),
            ImagePanel.img.getHeight(null));
    frame.setLocation(100, 100);
    frame.setVisible(true);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
4

5 回答 5

3

尝试研究java 并发性,特别是 Swing中的并发性。您可以在后台线程中运行音乐,但不要忘记在退出应用程序时停止它!

于 2012-04-23T22:18:04.023 回答
2

请参阅 JavaSound 信息中的播放Clip代码。页。

获取嵌入在游戏 Jar 中的声音的 URL,使用类似:

URL urlToExplosion = this.getClass().getResource("/path/to/boom.wav ");

编辑 1

frame.setSize(ImagePanel.img.getWidth(null),
        ImagePanel.img.getHeight(null));

糟糕,糟糕,糟糕。不考虑框架装饰。 ImagePanel应该设置一个preferredSize()等于图像的大小。由于它可能是ImageObserver,this可以用来代替null获取图像的宽度 x 高度。之后,只需将图像面板添加到框架并调用。

// set the frame to the smallest size needed to display the content
frame.pack();
于 2012-04-23T22:46:35.277 回答
0

您应该查看Java Media Framework以播放音乐和此类媒体,但不太确定 MP3 的功能虽然我没有尝试过,但我相信周围有更多的开源替代方案,但这应该可以解决问题。

您可以在此处下载它并在此处查看文档。这是它当前支持的格式列表,以防链接最终浪费您的时间

于 2012-04-23T22:56:48.793 回答
0

最简单的解决方案可能如下所示:

public void playSound(final String file) {
    new Thread(new Runnable() {

        @Override
        public void run() {
            Applet.newAudioClip(getClass().getResource(file)).play();
        }
    }).start();
}

在你的类旁边放置一个 wav 文件,或者在另一个包中并更改 getResource 方法,然后调用:

playSound("filename.wav");
于 2012-04-23T22:58:49.153 回答
0

看看这个
只要确保在单独的线程上运行它并在退出时停止歌曲,如上所述。
另外,只是一个提示:

ImagePanel panel = new ImagePanel(
        new ImageIcon(
                "C:\\Users\\Austin\\Pictures\\My Pictures\\Le Parkour\\ABC0001.jpg")
                .getImage());

你不应该这样做。如果您正在分发应用程序,将找不到路径并且不会显示图像图标。您应该创建一个包含资源的文件夹,然后像这样使用该路径:

ImagePanel panel = new ImagePanel(
    new ImageIcon("./resources/ABC0001.jpg").getImage());

这样应用程序就会知道在哪里寻找图像。

于 2012-04-24T00:04:34.590 回答