removeChild는 소리를 중지 할 책임이 없으며 시각적으로 제거하여 자식 목록에서 displayObject 만 제거합니다.
시작한 사운드를 중단하려면 removeChild를 호출 할 때 해당 SoundChannel에 대한 참조가 필요합니다. 그런 다음 SoundChannel.stop()을 사용하십시오. http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/SoundChannel.html#stop()
보다 정확한 답변을 제공하기 위해 더 많은 정보가 필요합니다.
시도한 옵션 중 하나가 프레임 40에서 타임 라인 내부에서 사운드를 재생하는 중입니다. 그런 다음 문제는 displayObject가 이미 제거되었지만 여전히 재생되는 것입니다. 내가 좋아하는 솔루션은 아니지만 작동합니다이 경우에, 당신이 할 수 있습니다 :
// on frame 40
if (this.stage != null) {
// play sound here
}
이의 DisplayObject의 무대가 무대에 아직 있다면, (존재하는이, 자식으로 추가되었다되고있는 경우 의미합니다 아직 제거되지 않았다면) 내부의 코드가 실행됩니다. 갑자기 사라지더라도 사운드는 계속 재생됩니다. 사운드 채널을 중지하려면 여전히 SoundChannel에 대한 참조가 필요합니다. 객체 내부에서 addEventListener(Event.REMOVED_FROM_STAGE, func)
을 사용하면 객체가 제거 된시기를 알 수 있으며 참조 된 함수 내에서 SoundChannel.stop 코드를 실행할 수 있습니다.
- 편집 : 사실이 작업을 수행 할 수있는 적절한 방법이 실제 타임 라인 내에서 개체를 만들 때
, 여기에 이벤트를 추가 할 수 있습니다 : 다음
myObjectWithSoundInside.addEventListener(Event.REMOVED_FROM_STAGE, objRemoved)
function objRemoved (event:Event):void {
// This is where you SoundChannel.stop()
}
당신이 removeChild(myObjectWithSoundInside)
을 실행할 때를, objRemoved의 내부 코드가 정확하고 잘 참조되었다고 가정하면 사운드가 멈춰야합니다.
출처
2012-03-14 04:01:34
ido
답장을 보내 주셔서 감사합니다! 그래서 object (scene1) 내에서 REMOVED_FROM_STAGE 이벤트를 사용하기로 결정했다면 프레임 40 내부에서도 함수를 빌드 할 수 있습니까? 또한 프레임 40에 채널과 사운드 객체를 만들겠습니까? 무비 클립 내부에서 채널에 액세스하려고하면 오류가 발생하므로 채널 및 사운드 인스턴스를 객체 내부에 넣어야합니다.이 객체는 끔찍한 방법으로 보입니다. – nobi
타임 라인에 포함 시키면 나쁜 결과를 초래할 수 있습니다. 나는 당신의 프로젝트 구조를 이해하고 있는지 확신 할 수 없다. 어쨌든, 똑같은 일 - 외부에서 REMOVED_FROM_STAGE 이벤트를 가져올 수 있습니다. 여기에서 SoundChannel을 중지 할 수있는 적절한 참조가 있습니다. 업데이트 된 답변을 확인하십시오. 도움이되기를 바랍니다. – ido