본문 바로가기

prev record

[2010.05.08.토요일] 디스플레이 계층간의 좌표, 전체화면으로 전환, metaData

디스플레이 계층간의 좌표

addChild(_volumeContainer)

_volumeContainer.addChild(_volumeMask)

위를 보면 _volumecontainer는 클래스 계층 상위에 등록 되어 있고 _volumeMask 는 _volumeContainer 의 자식 계층이다. 여기서 클릭했을 때 마우스의 x자표를 mouseX로 구한다고 하자. 마우스를 _volumeMask.x 에서 클릭 해서 좌표 값을 mouseX로 얻으면 값이 다르게 나타난다. mouseX는 stage 좌표 값을 _volumeMask.x 는 _volumeContainer 좌표 값을 가지기 때문이다. 두 좌표 공간은 서로 다르다.

마우스로 클릭으로 _volumeMask.x 와 같은 공간의 좌표 값을 얻는 방법은 간단하다. _volumeContainer.mouseX 이렇게 해주면된다. _volumeMask는 _volumeContainer 안에 있기 때문이다. 이 것 때문에 과제하는데 문제가 있었드랬다.




전체화면으로 전환

버튼 클릭으로 전체화면이 되게 하고, 다시 클릭하면 원래대로 되게 하려면,

if (stage.displayState == StageDisplayState.NORMAL) {
        stage.displayState = StageDisplayState.FULL_SCREEN;
} else {
        stage.displayState = StageDisplayState.NORMAL;
}

 위와 같은 걸 클릭 리스너 안에  넣어 주면 된다.




metaData 

이전에 봤던 NetStream 의 client 와 연결된 CustomClient 클래스에서 로드하는 flv의 정보가 담긴  metaData를 얻을 수 있다. 이벤트를 활용하면된다. 아래의 예는 flv의 총 플레이 시간(info.duration)을 얻을려고 하는 거다.

public class CustomClient extends EventDispatcher
{
      public function onMetaData(info:Object):void    //<---- 콜백 함수... 이벤트 리스너는 아니지만 비슷한 역할을 한다.
      {
            trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate);
         dispatchEvent(CustomEvent.create(GET_META_DATA_DURATION, info.duration));
       }

      public function onCuePoint(info:Object):void
     {
           trace("cuepoint: time=" + info.time + " name=" + info.name + " type=" + info.type);
     }
}

 


stream=new NetStream(connection);
stream.addEventListener(NetStatusEvent.NET_STATUS, onNetStatusHandler);

stream.client=new CustomClient();
stream.client.addEventListener(GET_META_DATA_DURATION, onReceiveMataData);

flv=new Video();
flv.attachNetStream(stream);

stream.play(flvURL)                 // <---- play 할때 접근...그래서 이거 전에 리스너 등록...
stream.pause();

private function onReceiveMataData(e:CustomEvent):void {
     duration = e.data     //<---- duration 변수에 담는다.
}

stream 이 실질적으로 play 시작해서 flv를 로드할 때 onMetaData에 접근한다. 그래서 이거 전에 데이타를 받을 리스너를 등록해야한다는 것에 주의해야 한다.