2011-09-22 114 views
0

我有一個事件觸發,顯示在影片進度:排除重複模量值

_currentPosition =3.86秒 _currentPosition =4.02秒 _currentPosition =4.16秒 等

什麼我想做的是每5秒向服務器發送一個通知,以指示進度。我可以使用Math.floor將秒數舍入到最接近的整數。然後我可以使用模數來獲得每五秒。我沒有看到的是如何不發送重複(例如)5,因爲5.02,5.15,5.36等將全部合格。

我想要類似於以下內容的東西,它在快速啓動事件中執行,類似於enterframe。但我不知道如何或在哪裏做測試_sentNumber,這裏聲明一下,在那裏將其復位......

var _sentNumber:int; 
    //_currentPosition is the same as current time, i.e. 5.01, 5.15, etc. 
var _floorPosition:int = Math.floor(_currentPosition); //returns 5 
    if(_floorPosition % 5 == 0) //every five seconds, but this should only happen 
             // once for each multiple of 5. 
    { 
     if(_floorPosition != _sentNumber)  //something like this? 
     { 
     sendVariablesToServer("video_progress"); 
     } 
    _sentNumber = _floorPosition; 

感謝。

回答

0

它看起來像你幾乎在那裏。我只是把_sentNumber聲明if語句裏面:

var _sentNumber:int = 0; 

private function onUpdate(...args:Array):void // or whatever your method signature is that handles the update 
{ 
    //_currentPosition is the same as current time, i.e. 5.01, 5.15, etc. 
    var _floorPosition:int = Math.floor(_currentPosition); //returns 5 
    if(_floorPosition % 5 == 0 && _floorPosition != _sentNumber) //every five seconds, but this should only happen once for each multiple of 5. 
    { 
     sendVariablesToServer("video_progress"); 
     _sentNumber = _floorPosition; 
    } 
} 
+0

是的,就是這樣。謝謝! – David

+0

爲什麼*這個工作? int是一個原始數據類型。因此,說var _sentNumber:int就像說var _sentNumber:int = new int()。所以每次它通過_sentNumber應該重新初始化爲0,所以這段代碼應該失敗。 – David

+0

我以爲你只是爲了簡單起見而把var _sentNumber:int放在那個位置!是的,您應該將該聲明移出該函數的範圍,以便它不會被重新初始化。我會更新我的答案以反映這一點。 – meddlingwithfire

0
private var storedTime:Number = 0; 

private function testTime():void{ 
    //_currentPosition is the same as current time, i.e. 5.01, 5.15, etc. 
    if(_currentPosition-5 > storedTime){ 
    storedTime = _currentPosition 
    sendVariablesToServer("video_progress"); 
    } 
}