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:そのため、シェイプの 1 つが起動するように通知しただけでも、animationStarthandler
ヒット テストが false である他のシェイプ クラスがアニメーションを設定し、interrupt
アニメーションが実行されません。
問題 2:ヒット テストが成功し、カーソルが領域内に を超える1 sec
と、ヒット テストはアニメーションを開始する通知を送信し続けます (アニメーションの持続時間は約 1.5 秒です)。アニメーションは一度だけで、同じアニメーションを何度も発射し続けますか?
アプリケーションのメイン メソッドでplayAnimation
、ポインター クラスのメソッドを呼び出してアニメーションを直接起動しようとすると、必要な結果が得られます。しかし、このホバー タイミングとアニメーション機能を ShapeClass 自体に提供したいと考えています。助言がありますか?