2009-10-14 8 views
0

어떻게 이런 일을하는지 알게 된 사람은 정말로 나를 도와주고있을 것입니다.시각적 변경 알림 이벤트?

아마도 간단하지만 잘 모르겠지만 포함 된 SWF가 포함되어있어 포함 된 SWF의 이벤트 처리기 또는 메서드와 상호 작용할 수 있다고 생각합니다.

는하지만 어쨌든, 여기있다 :

내가 (SWFLoaders에서) 캔버스에 여러 개의 포함 된 SWF의를 가지고 있고 그 중 하나가 시각적으로 변경 때 변경하는 일을 알아야합니다. SWFLoader의이 비디오 리플렉션을 포함

경우 그 비디오 리플렉션이 실행되는 동안 상위 응용 프로그램에서 생성 된 이벤트를 렌더링 지속적인있다 :

'렌더링'이벤트

솔루션의 일부만을 제공합니다. SWFLoader에 일부 정적 입력 컨트롤이 포함되어있는 경우 누군가가 해당 컨트롤과 상호 작용하고 시각적으로 변경 한 다음 상위 응용 프로그램에 브로드 캐스팅 이벤트가 브로드 캐스팅 될 때까지 상위 응용 프로그램에 렌더링 메시지가 없습니다. 따라서 이것은 분명히 나의 요구 사항의 일부입니다.

그러나 렌더링 이벤트에 대한 문제는, (. 대상 또는 currentTarget에서)이 하지 당신에게 포함 된 SWF가 실제로 변경 에게 않는다는 것입니다

하지만 변경 어느 알아야합니다.

(메시지 내에서 검출 될 수있는 예를 들어 부모 응용 프로그램의 것)에서 별도의 임베디드 응용 프로그램을 ( 생성되고이 렌더링 별도입니다.) 다음과 같이

+0

은 렌더링 상태를 변경하면 활성 상태를 알 수 있습니다. 또는 사용자 상호 작용에 의해 항상 활성화되는 렌더링 변경입니까? – longstaff

+0

render 이벤트는 제가 대략 알고있는 것 중 가장 근사한 것입니다. 하지만 필요한 항목이 변경된 항목을 알려주지 않는다고 말한 것처럼 변경된 항목 만 감지합니다. 그러나 그것은 사용자 상호 작용에 의해서가 아니라 컨트롤에 대한 시각적 변화에 의해 해고되었습니다. 실제로 그 컨트롤이 stage.invalidate()를 호출하여 발생한다고 생각합니다. 그러나 어쨌든, 나는 저를 위해 작동 할 해결책을 생각해 냈습니다. 그래서 나는 단지 아래의 해답으로 게시하고 이것을 닫을 것입니다. 아무도 제가 분명히 말하고있는 것을 알지 못하기 때문에 이것을 닫으십시오. – Mark

답변

1

내 솔루션은 다음과 같습니다

렌더링 이벤트가 발생하면 브라우저 창에 보이는 swfloader가 있는지 확인한 다음 저장된 BitmapData에 해당 내용의 BitmapData.draw를 수행합니다. 새로운 렌더 이벤트가있을 때마다 저장된 비트 맵의 ​​픽셀 중 10 %를 새 비트 맵과 비교하면 내장 된 .swf 비주얼 컨텐츠가 실제로 변경되었는지 여부가 표시됩니다. 10 % 샘플


하여 BitmapData.draw가 충분히 빠르고 통해 반복이다 (1 대신에, 막 (10)에 의해 벡터 인덱스 증분으로 각 비트 맵의 ​​벡터를 반복) 충분 이상으로 입증 10000 벡터 요소는 밀리 초와 같습니다.

+0

이것은 아마도 가장 좋은 답변 일 것입니다. –

+0

글쎄, 그 interesing 당신은 그것이 "최고"라고 말할 것입니다. 나는 그것이 "충분히 좋았다"고 말하는 것과 "최선의 것이 최선의 선입니다."라고 생각하고있었습니다. 불행하게도 내가 어떻게하고 싶었는지에 대해 터널 비전을 며칠 동안 가지고 있었기 때문에 다른 솔루션을 볼 수 없었습니다. – Mark

+0

차이 블렌드 모드를 사용하여 첫 번째 비트 맵 데이터 위에 두 번째 비트 맵 데이터를 그리는 것이 더 빠를 수도 있습니다. 그런 다음 getColorBounds를 사용하여 픽셀이 검정색이 아닌지 확인하십시오. – sharvey