2017-12-02 1252 views
0

MVC 디자인 패턴을 사용하여 Java 응용 프로그램에서 작업 중입니다. 이제 일부 소리를 재생하고 싶습니다. 코드를 사용하여 재생할 때 어디에서 오디오 사운드를 넣어야합니까? 어떤 레이어에 MVC?MVC Java 게임에서 사운드를 넣을 위치는 어디입니까?

일부 사운드는 사용자가 키를 누른 후에 재생해야 컨트롤러에 포함시킬 수 있습니다. 그러나 일부 소리는 얼마 후에 재생되며 모델은이 변경 사항에 대해 알고있는 사용자 상호 작용없이 재생됩니다. 그러나 모델 사운드에 사운드를 퍼팅하는 것은 나에게 나쁜 생각처럼 들린다. 어떻게 해결 될 수 있을까?

+0

당신은 사운드 파일 자체를 의미합니까? 또는 사운드 재생을 제어하는 ​​논리? –

+0

로직, 코드 자체 : –

답변

0

사운드 재생은 MVC 패턴과 별개의 기능입니다.

MVC에서보기와 일부 유사점을 가지고 있기 때문에 사용자에게 일부 정보도 제공됩니다. 하지만 더 간단합니다. 사운드 모듈은 사용자 입력을 소비 할 수 없으므로 컨트롤러가 필요하지 않습니다.

Observer pattern을 적용하는 사운드 모듈을 구현하는 것이 좋습니다. 모델은 이벤트를 생성하고 사운드 모듈은 해당 이벤트를 구독합니다. View 모듈과 정확히 동일한 방식으로 가입됩니다.

예를 들어 설명해 드리겠습니다. 총을 끈 플레이어가 있다고 가정 해 봅시다. 내부적으로 모델에 ShutGunEvent이라고 표시됩니다. 보기 및 소리 모두이 이벤트에 가입됩니다. 보기는 총알을 그리고 사운드는 총소리를 재생합니다.

+0

흥미로운 아이디어, 감사합니다. 그러나 특정 관측자에게 어떻게 알릴 수 있습니까? 이제는 this.notifyObservers()를 사용하여 모델에서 뷰를 알리려고합니다. 모델이 변경 될 때마다보기를 알리고 싶지만 사운드 모듈에 통보하고 싶습니다. –

+0

예, 모델의 모든 변경 사항에 대해 동시에 모든 뷰 객체에 알림을 보내시겠습니까? 변경 사항이 뷰의 특정 부분에만 영향을 미치는 방식으로 모델 오브젝트를 구성하는 것이 좋습니다. 그런 식으로 모든 모델 객체는 서로 다른 옵저버 세트를 갖게됩니다. 그러한 모델에서 당신의 견해 관찰자들은 똑같은 방식으로 다루어 질 것입니다. EG. 총을 쏜 경우 총알과 총구 만 바꿔야합니다. 메뉴보기에 이벤트를받지 않도록 메뉴 행을 다시 렌더링 할 필요가 없습니다. –