2010-12-05 6 views

답변

1

Adobe AS3 Alarm Clock example은 알아야 할 모든 정보를 제공합니다. 특히, setAlarm 방법이 중요합니다.

+0

플렉스 프로젝트에서 직접 사용할 수 있도록이를 swc 파일로 컴파일하는 방법은 무엇입니까? – fms

+0

플렉스 프로젝트에서 코드를 사용하기 만하면됩니다. 왜 이것을 swc로 패키지화하고 싶습니까? – spender

0

당신은 날짜 개체에게 그것은 플래시가 발광하지 않는 이벤트를 일으키는 초 동안 동결 수 있음을 제안했다 편집을 사용할 수 있습니다. 이것은 유효합니다 - 더 이상 문제가되지 않도록 업데이트했습니다.

var currDate:Date = new Date(); 

var targetHour:int = 14; 
var targetMinute:int = 30; 

var startHour:int = currDate.getHours(); 
var startMinute:int = currDate.getMinutes(); 

var eventTriggered:Boolean = false; 

// you can use an enterframe or a timer event here, doesn't matter which 
addEventListener(Event.ENTER_FRAME, onCheckTime); 

function onCheckTime(evt:Event):void{ 
    currDate = new Date(); 

    var hours:int = currDate.getHours(); 
    var minutes:int = currDate.getMinutes(); 

    // in order for this not to work flash would need to freeze for an entire minute 
    // not likely 
    if (hours == 14 && minutes == 30){ 
    trigger(); 
    } 

    // if flash froze for a whole minute 
    if (!eventTriggered){ 
    if (startHour <= targetHour && startMinute < targetMinute){ 
     if (hours > targetHour && minutes > targetMinute){ 
     trigger(); 
     } 
    } 
    } 
} 
function trigger():void{ 
    // do anything you want here 
    eventTriggered = true; 
    dispatchEvent(new Event("eventX")); 
    removeEventListener(Event.ENTER_FRAME, onCheckTime); 
} 
+0

어떤 이유로 플래시 플레이어가 시간 확인 직전에 반응이 없으면 건너 뛸 수 있습니다. 거기에 논리를 넣고 싶을 수도 있습니다. 따라서 건너 뛰어도 여전히 작동 할 수 있습니다. – AttackingHobo

+0

특히 dispatchEvent()를 사용하는 경우는 거의 없습니다. 플래시 플레이어가 응답하지 않으면 dispatchEvent()가 응답을하지 않아도 계속 수행됩니다. 즉, 그냥 넣는 로직을 추가하는 것이 쉽습니다. 지금 추가 할 시간이 없지만 나중에 다시 돌아와서 내 대답을 업데이트 할 것입니다. – Zevan

+0

AHobo가 말한 것처럼 hours == 14, minutes == 30 및 seconds == 0 일 때 타이밍 이벤트가 발생하지 않을 것이라는 보장이 없으므로 방법이 신뢰할 수 없습니다. 타이밍 이벤트 (타이머 또는 엔터 프레임 일 것임)가 14시 29 분 59 초에 시작한 다음 14시 30 분 1 초에 논리를 모두 건너 뛰는 것이 전적으로 가능합니다. 스펙은 정확한 시간에 이벤트를 보장하지 못하지만, AHobo의 시나리오는이 방법을 나쁜 해결책으로 만듭니다. -1 – spender

0

이유는 언급에 대한 반복 이벤트에 대한 트리거 포인트와 같은 날짜()를 사용하여 신뢰할 Date 클래스는 사용자가 변경할 수있는 로컬 컴퓨터의 시간을 묶여도 있기 때문이다. 드물 긴하지만, 사용자는 로컬 시스템의 날짜를 변경하여 목표 날짜에 도달하지 못하게 할 수 있습니다. 당신이) (를 날짜를 사용한다면

그러나, (트리거를 가지고, 내가 당신에게 전체 분을 줄 것이다, 다음처럼 접근 할 수있는 (또는 당신은 timeOutLength에게 변수를 설정 무엇이든))이라고합니다. else 블록은 trigger() 호출없이 트리거 창이 어떻게 든 통과하면 trigger()을 호출합니다. 나머지 함수는 트리거 창이 만료 될 때까지 대기 기간을 작성한 후 하루를 롤 포워드하고 프로세스를 다시 시작합니다.

var timeOutLength:Number = 1; 
var minutesToWaitUntilReset:Number = timeOutLength + 1; 
var hasBeenTriggered:Boolean = false; 

var targetHour:Number = 2; 
var targetMinute:Number = 38; 

var currentYear:Number = new Date().getFullYear() 
var currentMonth:Number = new Date().getMonth(); 
var currentDay:Number = new Date().getDate(); 

addEventListener(Event.ENTER_FRAME, onCheckTime); 

function onCheckTime(evt:Event):void 
{ 
    var currentDate = new Date().getTime(); 
    var targetDate = new Date(currentYear, currentMonth, currentDay, targetHour, targetMinute).getTime(); 
    var timeOutDate = new Date(currentYear, currentMonth, currentDay, targetHour, (targetMinute + timeOutLength)).getTime(); 

    if (currentDate >= targetDate && currentDate < timeOutDate && hasBeenTriggered == false) 
    { 
     tiggerDailyEvent(); 
    } 
    else if(currentDate >= timeOutDate && hasBeenTriggered == false) 
    { 
     tiggerDailyEvent(); 
    } 
} 

function tiggerDailyEvent():void 
{ 
    hasBeenTriggered = true; 
    removeEventListener(Event.ENTER_FRAME, onCheckTime); 
    addEventListener(Event.ENTER_FRAME, waitForReset); 

    // this is where you call your daily event 
} 

function waitForReset(evt:Event):void 
{ 
    var currentYear = new Date().getFullYear(); 
    var currentMonth = new Date().getMonth(); 
    var currentDay = new Date().getDate(); 

    var currentDate = new Date().getTime(); 
    var resetDate = new Date(currentYear, currentMonth, currentDay, targetHour, (targetMinute + timeOutLength + minutesToWaitUntilReset)).getTime(); 

    if(currentDate >= resetDate) 
    { 
     removeEventListener(Event.ENTER_FRAME, waitForReset); 
     reset(); 
    } 
} 

function reset():void 
{ 
    hasBeenTriggered = false; 

    currentYear = new Date().getFullYear(); 
    currentMonth = new Date().getMonth(); 
    currentDay = new Date().getDate() + 1; 

    addEventListener(Event.ENTER_FRAME, onCheckTime); 
} 
관련 문제