2016-08-16 3 views
1

내 게임에 다른 사운드를로드하려고합니다. 한 음은 "upNoise"라고 불리는 놀이가 점프하는 초과 근무를해야합니다. 나는 "Sound"라고 불리는 클래스를 가지기를 원하고 서로 다른 파일을 재생하기 위해 다른 함수를 호출하기를 원합니다. 문제 : "SoundFile (Sound, String)"생성자가 존재하지 않는다고 말합니다. 내 코드를 heres.로드 처리 및 사운드 재생

import processing.sound.*; 

class Sound { 

    SoundFile file; 

    Sound() { 

    file = new SoundFile(this, "upNoise.wav"); 

    } 

}

답변

0

SoundFile 생성자는 생성자로 전달 PApplet의 인스턴스를 기대한다.

스케치를 할 때 this 키워드를 사용하면 PApplet 인스턴스를 참조 할 수 있습니다.

하지만 Sound 클래스이므로 this 키워드는 Sound 인스턴스를 나타냅니다. 그것이 당신이 SoundFile 생성자에 전달하는 것입니다. 그리고 SoundFile은 귀하의 Sound 클래스가 무엇인지 알지 못하므로 그 오류가 발생합니다.

이 문제를 해결하려면 PApplet 인스턴스를 SoundFile 생성자에 전달해야합니다.

옵션 1 : 매개 변수로 당신의 Sound 생성자에 PApplet 인스턴스를 통과 한 다음 SoundFile 생성자에 해당 매개 변수를 전달합니다. 귀하의 Sound 생성자는 다음과 같습니다 처리 이후 : 2

void setup(){ 
    Sound yourSound = new Sound(this); 
} 

옵션 :

당신의 처리 스케치에서 다음
Sound(PApplet sketch){ 
    file = new SoundFile(sketch, "upNoise.wav"); 
} 

, 당신은 this 키워드를 사용하여 Sound 생성자에 PApplet를 통과 할 것 모든 클래스를 내부 클래스로 취급 할 경우 스케치에서 this을 전달하는 대신 스케치의 이름을 사용하여 "바깥 쪽"을 참조하는 약간 이상한 구문을 사용할 수도 있습니다.

Sound(){ 
    file = new SoundFile(YourSketchName.this, "upNoise.wav"); 
} 

는 그러나 이것은 조금 이상한이며, 모든 경우에 작동하지 않습니다, 그래서 당신은 당신의 스케치에서 this을 통과 아마 더 낫다.

자세한 내용은 the reference에서 확인할 수 있습니다.

+0

감사합니다. 첫 번째 옵션이 저에게 효과적이었습니다! –