2008-09-26 3 views
1

매우 이상한 것을 조사하면서 오늘이 주제를 접했습니다. Flex 애플리케이션에서 특정 작업을 수행하면 12fps에서 30fps로 로케트로 렌더링되는 프레임 수가 증가 할 수 있습니다.로드 된 애니메이션은 고속으로 재생되기 시작하고 GUI가 잠기기 시작합니다.플렉스 이벤트 (Flex Post) 이벤트 화면 업데이트

"플렉스/플래시 해머에서 읽은 모든 것은"프레임 속도가 최상위 수준 앱에 설정된 프레임 속도로 제한되어 있습니다 "라는 점 때문에 이러한 추가 렌더가 발생할 수있는 유일한 방법 인 것처럼 보입니다 이벤트를 유발하는 이벤트 (스테이지의 프레임 속도에 프로그래밍 방식으로 변경하지 않아도됩니다.) 이후 업데이트 로직을 ENTER_FRAME 핸들러에 넣었을 때만 발생했기 때문에 Flex가 렌더링에 미친듯한 결과를 초래할 수있는 상황을 파악하려고합니다.

가설 : 내 업데이트 기능에 뭔가가 즉시 화면 업데이트를 트리거되고, 이것은 또 다른 즉시 화면 갱신을 트리거 내 업데이트 루프가 호출되는 것을 의미 즉시 다른 ENTER_FRAME,,, ...

우리는 플렉스 구성 요소가 제기 이것이 GUI 인 경우 GUI에서 사용됩니다. 나는 이것에 관해 다음에 어디로 갈지 정말로 모른다.

부연 설명는 :

  • 나는 일들이 속도를 말할

    , 는이 명단 두 가지 방법이 있습니다.
  • 첫 번째로, 내 ENTER_FRAME 처리기는 훨씬 더 자주 호출되는 을 가져옵니다.
  • 두 번째로 루프 애니메이션이 갑자기 작성된 플래시 SWF를로드하면 바보가 될 때까지 최대 속도는 입니다.
  • updateAfterEvent를 사용하고 있지 않습니다. 을 조사 할 때 만 존재 함을 발견했습니다. 분명히, 이벤트가 Sprite 서브 클래스 에 자동으로 호출되며 그 원인이 근본적인 경우 이 궁금합니다.
  • 렌더링과 관련하여 직접적인 메시지를 보내지 않을 것입니다. 그들은 내장 CS3 제작에서 타임 라인을 가지고있는 배경 애니메이션은 우리의 모든 업데이트 기능은 DisplayObject의 위치를 ​​변경하거나 추가/제거입니다 않습니다, 자동으로 재생 등 업데이트

: 내 응용 프로그램에 레이블을 추가 stage.frameRate를 출력하고 특정 시간에 발견되면 갑자기 12에서 1000 (최대 허용 값)으로 변경됩니다. 내 ENTER_FRAME 핸들러에 라인을 추가하여 리셋하는 것은 쉬운 일이 아니지만 큰 도움이됩니다. 또한 이렇게해도 렌더링이 엉망입니다. Alert (알리미) 팝업을 올리는 것과 같은 특정 행동을 통해 모든 것이 다시 살아납니다. 아쉽게도 Setter 속성에 중단 점을 설정하기 위해 Stage 클래스의 소스를 볼 수 없습니다.

'1000fps로 설정'되는 플렉스 로딩에 대해서는 매우 흥미 롭습니다. 우리는 공통 인터페이스를 제공하는 여러 Flex 애플리케이션을 보유하고 있습니다. 마스터 애플리케이션은 SWFLoader 클래스를 통해 필요에 따라 이러한 모듈을로드하는 역할을 담당합니다. 그러나 로딩 프로세스는 이미 지연된로드를 고려합니다. SWF가로드되면 SystemManager에서 APPLICATION_COMPLETE을 기다립니다. 일단 이것이 수신되면 어플리케이션 완료가 발생하지 않아야합니까?

답변

1

한 가지 확실하지 않은 점은 실제 화면 새로 고침이 게시 된 프레임 속도보다 빠르게 진행되고 있다는 것입니까?아니면 애니메이션이 더 빠르게 움직이고 있지만 화면이 새로 고쳐지는 것은 변경되지 않았습니까? (예 : 초당 10 픽셀을 움직 였지만 화면이 그어진 빈도에 관계없이 더 빠르게 움직입니다.)

이 방법을 쉽게 확인할 수있는 방법은 1fps로 콘텐츠를 게시하는 것입니다 . 화면이 초당 한 번 다시 그려 지지만 애니메이션 요소는 그보다 자주 이동하는지 또는 실제로 화면이 더 자주 업데이트되는지 여부는 분명해야합니다.

후자의 경우 코드에 updateAfterEvent() 메서드를 사용하고 있습니까? 이로 인해 실제 화면 새로 고침이 게시 된 프레임 속도보다 빠르게 발생할 수 있습니다. 그래도 ENTER_FRAME 이벤트에 영향을 미치지 않습니다. 프레임 당 업데이트 중 하나만 가져와야합니다.

Sprite 등의 애니메이션을 적용하거나 Flex 구성 요소로 구현하고 invalidate() 메서드 및 RENDER 이벤트 등으로 다시 그려 보는 중입니까?

질문에서 이러한 몇 가지 점을 분명히 할 수 있다면 대답이 더 분명해질 수 있습니다. 감사합니다 ...

1

설명해 주셔서 감사합니다. 애니메이션이있는로드 된 클립 (프레임 애니메이션을 의미하는 것으로 가정)이 가속화되면 다른 일과는 달리 재생 프레임 속도가 변경되는 것처럼 들립니다. 그것으로는 내가 전에 작물까지 본 적이 문제가 아니라고 말했다,하지만 난 당신이 시도 할 수있는 몇 가지가 생각이 어디에 문제가 좁혀한다고 :

  1. 당신은뿐만 아니라 밖으로 추적을 시도 할 수 있습니다 속도 향상 동안 stage.frameRate. 아마 아무 것도 당신의 프레임 속도를 변경해야하지만, 그 이후로 당신이 그것을 밖으로 배제 수도 있습니다 귀하의 문제를 설명 할 것이기 때문에.

  2. 가능한 한 많은 GUI 구성 요소를 제거하고 문제가 계속 발생하는지 확인하십시오. 문제가없는 경우 문제가 계속 발생하는지 확인하십시오.

  3. 당신이 시도 할 수있는 하나의 온 전성 수표는 가능한 경우 게임의 일부 내용을 새로운 프로젝트로 복사하여 거기에서 시도하는 것입니다. 때로는 신비한 문제가 발생합니다. 일부 클래스 또는 SWC가 모든 사람들이 잊어 버린 곳으로 가져 오기 때문입니다.

  4. 다른 이벤트에서 코드를 실행할 수도 있습니다. 예를 들어, 내가 아는 한 멀리 운전하는 것 Event.EXIT_FRAME 또는 Event.FRAME_CONSTRUCTED는 똑같이보아야한다. 그러나 그렇지 않으면 그것은 암시이다. 또는 키보드 이벤트 또는 MouseEvent.MOUSE_MOVE과 같은 것으로부터 운전 해 볼 수도 있습니다. 그런 다음 이벤트를 실행하지 않아도 업데이트가 발생하면 이벤트 루프 외에도 다른 것을 유도하고있는 다른 것을 알게됩니다.

어쨌든 시도해 보았습니다. 희망을 추적 해 ...

4

Flex는 Flex 구성 요소의 "단계적 인스턴스화"중에 프레임 속도를 1000으로 설정합니다. 이는 플렉스 swf의 초기로드 중에 만 발생합니다. 이를 통해 모든 구성 요소를 매우 빠르게 작성할 수 있습니다.

Flex 앱이 완전히로드되고 구성되기를 기다리고 계십니까? Flex 내용을 사용하기 전에 FlexEvent.CREATION_COMPLETE을 기다려야합니다.

이 위치에 대한 참조를 원하시면 Flex LayoutManager 클래스 326 행 (Flex SDK 3.0 사용)을 살펴보십시오.194161), 속성 usePhasedInstantiation에 대한 세터에서.

업데이트 :

APPLICATION_COMPLETE가 초기 부하 적용해야합니다.

실제로 이는 구성 요소가 MXML에서 직접 생성 될 때마다 발생합니다. 그래서 찾아야 할 몇 가지 다른 경우가 있습니다. 리피터를 사용하고 있습니까? 필요에 따라 자녀를 키우는 탐색 컨테이너를 사용합니까?

+0

아, 모든 MXML 구성 요소에 대해 APPLICATION_COMPLETE가 발생했다고 생각하지 않았습니다. 이것은 내가 보는 것을 통해 확실히 이해할 수 있습니다. 필요로하는 것에 대한 더 명확한 설명이 있지만 새로운 질문으로 제기하는 것이 이치에 맞습니다. – MidnightGun

+0

Application 클래스가 아닌 다른 구성 요소의 경우 실제로는 CREATION_COMPLETE이지만 동일한 용도로 사용됩니다. – user23405