我有一個形狀類,其中有一個方法(hitTest(int,int)
),它不斷檢查鼠標是否在其邊界內。在另一種方法中,我繼續檢查鼠標是否在此停留超過1秒。
如果有,則觸發一個運行動畫的函數(通過通知/事件)
它沒有,則不觸發動畫
如果它已經觸發動畫並且動畫正在運行但鼠標離開在這個區域,觸發中斷功能(通過通知/事件)
僅從類中調用一次方法
//OnLoad _initHover = false;
void update() //called continously in the application per frame
{
if(hitTest(getMouseX(), getMouseY())){
if(!_initHover){
_initHover = true;
_hoverStartTime = getCurrentTime(); //start hover time
cout<<"Start hist test\n";
}
//If it has hovered over the video for 1.0 sec
if((ofGetElapsedTimef() - _hoverStartTime) > 1.0){
cout<<"Hitting continously for 1 sec\n";
notificationCenter->postNotification(new AnimationStartNotification);
}
}
else{
_initHover = false;
notificationCenter->postNotification(new AnimationInterruptNotification);
}
}
上面的代碼運行正常,但有我試圖使用面臨的一個合乎邏輯的問題。上述Shape類有多個實例,因此每個類都有它們的update()
方法。在整個應用程序中,鼠標光標具有其中的一個類別animationStarthandler
和animationStophandlers
。
問題1:所以,即使形狀的一個剛剛通知animationStarthandler
火,其他形狀類上擊中測試爲假集動畫interrupt
和動畫不運行。
問題2:當命中測試成功並且光標在該區域中超過1 sec
時,命中測試將繼續發送通知以開始動畫(動畫的持續時間約1.5秒)。如何限制命中測試只啓動一次動畫並繼續一次又一次地發射相同的動畫?
如果在我的應用程序的主要方法中,我直接嘗試通過調用指針類中的方法playAnimation
來觸發動畫,我會得到所需的結果。但我想給這個懸停時間和動畫功能給ShapeClass本身。有什麼建議麼?
這是否意味着每個'Shape'類都有一個單獨的計時器?做動畫時的常見做法是有一個**單個定時器**,它跟蹤整體fps並同時調用所有重繪。另外,我沒有看到輪詢'Update'方法的原因。您應該簡單地處理'MouseMove','MouseEnter'和其他鼠標事件,並從那裏調用'Update',而單獨的(單個)定時器渲染所有形狀。 – Groo