2010-12-05 1 views

答えて

1

アドビAS3 Alarm Clock exampleは、知っておくべきことをすべて教えてください。特に、setAlarm方法が重要である。あなたは EDIT 日付オブジェクトを使用することができます

+0

私のflexプロジェクトで直接使用できるように、swcファイルにコンパイルするにはどうすればいいですか? – fms

+0

フレックスプロジェクトでコードを使用するだけです。なぜこれをswcとしてパッケージ化したいのですか? – spender

0

それは、フラッシュが発光しないイベントを発生させる秒間フリーズ可能性が示唆されました。これは有効です - これは更新されましたので、これはもはや問題ではありません。 Dateクラスは、ユーザーが変更することができ、ローカルマシンの時間を、結ばれているので、繰り返しイベントのトリガポイントとして日付()を使用

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によれば、時間== 14、分== 30、秒== 0のときにタイミングイベントが発生するという保証はないので、メソッドは信頼できません。タイミングイベント(タイマーかEnterframeか)は、14:29.59で起動し、14:30.01でロジックを完全にスキップする可能性があります。この仕様は、正確な時刻にイベントを保証するものではなく(また、保証することもできません)、まれにありませんが、AHoboのシナリオはこれを悪いソリューションにしています。 -1 – spender

0

も言及したとの理由で信頼できないです。ほとんどの場合、ユーザーはローカルマシン上の日付を変更し、それが目標の日付に達することを許可しません。

あなたは日()を使用した場合しかし、私はトリガーを持っている、あなたの完全な分(またはものは何でもtimeOutLength変数に設定)を与えることになる、次のようにそれに近づく可能性があります( )が呼び出されます。 elseブロックは、trigger()が呼び出されずに何らかの方法でトリガーウィンドウが渡された場合、trigger()を呼び出します。残りの関数は、トリガーウィンドウが期限切れになるまで待機期間を作成し、その後、日付を1日前にロールバックしてプロセスを再開します。

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); 
} 
関連する問題