我正在尝试为游戏加载不同的声音。加班时,一种声音必须播放,这称为“ upNoise”。我想要一个名为“ Sound”的类,并调用不同的函数来播放不同的文件。问题说:它说构造函数“ SoundFile(Sound,String)”不存在。这是我的代码。
import processing.sound.*;
class Sound {
SoundFile file;
Sound() {
file = new SoundFile(this, "upNoise.wav");
}
}
最佳答案
SoundFile
构造函数希望将PApplet
的实例传递到其构造函数中。
在草图中时,可以使用this
关键字引用该PApplet
实例。
但是由于您在Sound
类中,因此您的this
关键字引用了Sound
实例。这就是您要传递给SoundFile
构造函数的内容。而且SoundFile
不知道您的Sound
类是什么,因此您会收到该错误。
要解决此问题,您必须将PApplet
实例传递到SoundFile
构造函数中。
选项1:将PApplet
实例作为参数传递给您的Sound
构造函数,然后将该参数传递给SoundFile
构造函数。您的Sound
构造函数可能如下所示:
Sound(PApplet sketch){
file = new SoundFile(sketch, "upNoise.wav");
}
然后在“处理”草图中,使用
PApplet
关键字将Sound
传递到this
构造函数中:void setup(){
Sound yourSound = new Sound(this);
}
选项2:由于处理将所有类都视为内部类,因此您还可以使用略带奇怪的语法,即通过使用草图名称来引用“外部”,而不是从草图中传入
this
:Sound(){
file = new SoundFile(YourSketchName.this, "upNoise.wav");
}
但这有点怪异,在所有情况下都行不通,因此最好从草图中传入
this
。可以在the reference中找到更多信息。