0

我早些时候发布了这个,但它并不完全符合stackoverflow标准。我清理了代码并进一步阐明了我的问题,所以这里是:

我正在为一个 CS1 项目的小程序制作一个两人小行星游戏。我试图弄清楚如何使用我可以在某些时候调用的方法来实现音效。我发现本教程(http://www.dreamincode.net/forums/topic/14083-incredibly-easy-way-to-play-sounds/)就是这样做的,但我在嵌套循环时遇到了一些问题句法。

如何从不同的类(在我的例子中为 AsteroidsGame.java)在 Sound 类中构造“Sound”对象?

由于教程代码的混乱,这里是我的提高可读性。

//Import Statements
import java.applet.*;
import javax.swing.*;
import java.io.*;
import java.net.*;

public class Audioapp extends JApplet
{
public class Sound // Holds one audio file
{
    private AudioClip song; // Sound player
    private URL songPath;   // Sound path

    Sound(String filename)
    {
        try
        {
            songPath = new URL(getCodeBase(),filename); // Get the Sound URL
            song = Applet.newAudioClip(songPath); // Load the Sound
        }
        catch(Exception e){} // Satisfy the catch
    }

  //Loops audio file
  public void playSound()
  {
     song.loop();
  }


  //Stops audio file
  public void stopSound()
  {
     song.stop();
  }


  //Plays audio file once
  public void playSoundOnce()
  {
     song.play();
  }

} //Closes Sound()


  public void init()
  {
    Sound testsong = new Sound("song.mid");
    testsong.playSound();
  }

} //Closes Audioapp()

编辑 1:刚记得上一个帖子中有人建议我在编译/运行它时发布它的作用。这个 .java 本身什么也不做;但是当与我的项目的其余部分一起放置时,它确实可以毫无错误地编译。

编辑 2:非常感谢 Zim-Zam 的所有帮助,如果有人发现此线程并遇到相同问题,请查阅他的评论。

4

1 回答 1

1

我建议您将内部类更改为public static class Sound- 这将允许您构造类的实例而无需Audioapp.

然后,要创建 的实例Sound,您只需将其视为其名称Audioapp.Sound,例如Audioapp.Sound sound = new Audioapp.Sound()

如果内部类不是静态的,那么您将使用Audioapp.Sound sound = audioApp.new Sound(),其中audioapp的实例是Audioapp

于 2013-04-30T03:30:18.093 回答