2013-01-05 4 views
0

Flash (ActionScript 3)에서 부드럽게 스크롤 할 수 있습니까? 다음 테스트에서는 랜덤 노이즈로 구성된 비트 맵을 생성 한 다음 주기적으로 왼쪽으로 이동합니다. 백그라운드에서 무거운 작업을 수행 할 필요가 없습니다. 내가 무엇을 찾고 있어요 것은Flash AS3에서 부드럽게 스크롤

package { 
    import flash.display.*; 
    import flash.events.TimerEvent; 
    import flash.utils.Timer; 

    public class Game extends Sprite { 
     var noiseBitmap; 

     public function Game() { 
      var noiseBitmapData = new BitmapData(stage.stageWidth * 3, stage.stageHeight); 
      noiseBitmapData.noise(0, 0, 255, 7, true); 
      noiseBitmap = new Bitmap(noiseBitmapData); 
      addChild(noiseBitmap); 

      var t = new Timer(1000/30, 999999); 
      t.addEventListener("timer", function (e:TimerEvent) { 
       noiseBitmap.x--; 
      }); 
      t.start(); 
     } 
    } 
} 

은 "렌더링 코드":-) 1987 제 아미 (500)와 비슷한 수준이 될 것 부드러움 내 컴퓨터 (2.4 GHz의 맥)에서 실행 < 1 밀리 초 걸리지 만, 여전히 움직임이 프레임 또는 2에 붙어 때때로 움직이게되어 움직임이 갑자기 나타나게됩니다.

FPS는 플래시에서 30으로 설정됩니다. 나는 그것을 "시험 영화"와 브라우저 (크롬) 둘 다 사용하여 실행 해 보았습니다. 대상은 Flash Player 11.2입니다. 또한 e.updateAfterEvent()를 호출하여 강제로 다시 그리기를 시도했습니다. 나는 또한 딜레이와 FPS를 약간 다른 값으로 설정했지만 개선은하지 않았다.

이미 BitmapData를 사용하고 있기 때문에 not smooth scrolling in AS3과 다릅니다. 또한 해당 질문에 회신 제안 된 타이머 대신 ENTER_FRAME 이벤트를 사용하여 시도했지만 도움이되지 않았습니다.

+0

프레임 사이의 지연은 31 - 34ms 사이로 유지됩니다. – Bemmu

+0

다른 곳에서 답을 얻었으니 확실히 타이머보다는 ENTER_FRAME을 사용해야합니다. 그러나 어느쪽으로 든, 가비지 컬렉터가 움직이는 것으로 인해 저속함이 발생할 수 있습니다. 코드를 진단하기위한 프로파일 링 도구에 대한 액세스 권한이없는 경우 Adobe 스카웃은 한 번 볼만한 가치가 있습니다. –

답변

3

타이머를 사용할 때 프레임 속도와 정확히 동기화되지 않습니다. 언급 한대로 프레임 속도가 조금씩 변동하여 한 프레임에서 두 번 터지거나 프레임을 건너 뛰는 경우가 있습니다. 프레임 속도와 더 잘 일치하려면 Event.ENTER_FRAME 이벤트를 청취해야합니다.

예 :

this.addEventListener(Event.ENTER_FRAME, updateFrame); 

function updateFrame(e:Event):void { 
    noiseBitmap.x--; 
} 
+0

감사합니다. 그러나 ENTER_FRAME을 사용하면 개선되지 않았습니다. – Bemmu

3

난 당신이 Greensock의 TweenLite을 시도하는 것이 좋습니다. 코드를 통해 모든 종류의 트위닝을 수행 할 수 있도록 최적화 된 엔진이며 AS2 및 AS3에서 사용할 수 있습니다. 당신은 그것을 here 찾을 수 있습니다.

Walkietokyo의 솔루션은 여전히 ​​프레임 기반이므로 실행중인 문제를 제거하지는 못합니다. TweenLite가 실제로 구현 한 시간 기반 애니메이션을 대신 사용하십시오. 자세한 내용은 this article을 참조하십시오.