2012-09-19 6 views
5

as3에서 시간 카운터는 어떻게 만듭니 까? google에 약간 간단한 수색은 실제적으로 사건의 카운터이고 아닙니다 적당한 시간 계산 유틸리티 AS3 종류 타이머에 당신을 가르 킬 것이다.AS3에서 (적절한) 시간 카운터 만들기

본인은 http://blogs.adobe.com/pdehaan/2006/07/using_the_timer_class_in_actio.html이며 본인이 작동해야하는 공식 문서라는 점에 조금 걱정됩니다.

Q : 어디에서 문제가 발생합니까?

A : Timer 클래스는 이벤트 스택에서 작업을 실행하며 꽤 많은 애플리케이션이있는 경우 타이머를 사용하여 초, 밀리 초 또는 기타를 계산할 때 시간이 왜곡 될 수 있습니다.

답변

1

어떻게 무시합니까?

적절하게 시간을 계산하는 스크립트에서도 날짜 클래스를 사용하기 만하면됩니다.

  1. 가 첫 번째 프레임에이 코드를 추가
  2. 이 minText, secText, MilText라는 이름의 3 텍스트 상자를 추가 새로운 AS3 문서 및 버튼이라고 start_btn 만들기 :

var에 STT : INT를; //이 변수를 사용하여 시작 시간을 타임 스탬프로 추적합니다.
var myTimer : Timer = new Timer (1); // 이것은 우리의 타이머입니다

var starttime:Date; // pretty obvious 
var actualtime:Date; // pretty obvious 

myTimer.addEventListener(TimerEvent.TIMER, stopWatch); // we start counting with this counter 

start_btn.addEventListener(MouseEvent.CLICK, startClock); // add a button listener to start the timer 

function startClock(event:MouseEvent):void 
{ 
    starttime = new Date(); // we get the moment of start 
    stt = int(starttime.valueOf().toString()); // convert this into a timestamp 
    myTimer.start(); // start the timer (actually counter) 
} 

function stopWatch(event:TimerEvent):void 
{ 
    actualtime = new Date(); // we get this particular moment  
    var att:int = int(actualtime.valueOf().toString()); // we convert it to a timestamp 

    // here is the magic 
    var sec:int = (Math.floor((att-stt)/1000)%100)%60; // we compute an absolute difference in seconds 
    var min:int = (Math.floor((att-stt)/1000)/60)%10; // we compute an absolute difference in minutes 
    var ms:int = (att-stt)%1000; // we compute an absolute difference in milliseconds 

    //we share the result on the screen 
    minText.text = String(min); 
    secText.text = String(sec); 
    milText.text = String(ms); 
} 

왜 Date 클래스의 기능을 사용하지 않고 시간 소인이 필요합니까?

두 사건 사이의 차이를 계산하려면 당신은 아마이을 사용하기 때문에 : 당신의 시작 이벤트가 57'th 초에 발생하고 종료 이벤트가 일어나는 경우 매우 잘못

 endEvent.seconds - startEvent.seconds 

두 번째로 17 초, 20 초 대신에 -40 초를 얻는다.

+1

'flash.utils.getTimer()이 내가 가지고있는'Date' 클래스 – BadFeelingAboutThis

5

정확하게 측정 시간의 짧은 간격을 그냥 플래시 플레이어가 시작된 이후 경과 한 시간을 밀리 초 단위로 반환 getTimer() 기능 (flash.utils.getTimer)를 사용하는 방법을 찾고 있다면. 원형 적 간단한 스톱워치 클래스는 다음과 같습니다

public class StopWatch { 
    private var _mark:int; 
    private var _started:Boolean = false; 

    public function start():void { _ 
     mark = getTimer(); 
     _started = true; 
    } 

    public function get elapsed():int { 
     return _started ? getTimer() - _mark : 0; 
    } 
} 

More Info:

+0

에 따라'더 효율적입니다 Date()가 시스템 시간에 의존하지만 getTimer()가 Flash 런타임 가상 시스템에 의존하기 때문에 조금 의심 스럽습니다. 그것은 테스트해야하지만 무거운 애플 리케이션에 너무 뒤에 빠질 수도 있습니다 생각합니다. – BadFeelingAboutThis

+0

를 사용하는 것보다 확실히 더 다른 답변 – Mike

+0

@mugur 당신은 무엇을 기반으로합니까? 어떤 방식 으로든 기본 운영 체제에 특정 시스템 시간 또는 시스템 틱 (예 : http://en.wikipedia.org/wiki/GetTickCount 참조)을 묻습니다. –