从类中只调用一次方法
Invoke a method only once from a class
我有一个形状类,其中有一个方法(hitTest(int,int)
),连续检查鼠标是否在其边界内。在另一种方法中,我继续检查鼠标是否停留在那里超过1秒。
如果有,触发一个函数(通过notification/event)来运行动画
如果没有,则不要触发动画
如果它已经触发了动画,动画正在运行,但在此期间鼠标离开了该区域,触发一个中断函数(通过通知/事件)
//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 testn";
}
//If it has hovered over the video for 1.0 sec
if((ofGetElapsedTimef() - _hoverStartTime) > 1.0){
cout<<"Hitting continously for 1 secn";
notificationCenter->postNotification(new AnimationStartNotification);
}
}
else{
_initHover = false;
notificationCenter->postNotification(new AnimationInterruptNotification);
}
}
上面的代码运行良好,但有一个逻辑问题,我所面临的,而试图使用。上面的Shape类有多个实例,因此每个类也有自己的update()
方法。在整个应用程序中,具有animationStarthandler
和animationStophandlers
的鼠标光标为单个类。
Issue 1:所以,即使其中一个形状只是通知animationStarthandler
触发,其他命中测试为false的形状类将动画设置为interrupt
,动画也不会运行。
Issue 2:当命中测试成功并且光标在该区域超过1 sec
时,命中测试将继续发送通知以开始动画(动画持续时间约1.5秒)。我如何限制命中测试只触发动画一次,并一次又一次地继续触发相同的动画?
如果在我的应用程序的主方法中,我直接尝试通过调用指针类中的playAnimation
方法来触发动画,我得到了所需的结果。但我想把这个悬停计时和动画功能赋予ShapeClass本身。有什么建议吗?
我认为您应该考虑添加一个新的布尔值,它保存动画触发的信息(在代码示例_animationTriggered
中调用)。这可以防止没有触发动画的形状停止动画,也可以防止触发动画的动画多次播放动画。
if(hitTest(getMouseX(), getMouseY()))
{
if(!_initHover)
{
_initHover = true;
_hoverStartTime = getCurrentTime();
cout<<"Start hist testn";
}
if((ofGetElapsedTimef() - _hoverStartTime) > 1.0)
{
if (!_animationTriggered)
{
cout<<"Hitting continously for 1 secn";
notificationCenter->postNotification(new AnimationStartNotification);
_animationTriggered = true;
}
}
}
else
{
if ( _animationTriggered )
{
_initHover = false;
notificationCenter->postNotification(new AnimationInterruptNotification);
_animationTriggered = false;
}
}
不要忘记在与_initHover
- 在unordered_multimap中精确迭代一次每个键的有效方法
- 访问随机图像像素的快速方法,最多一次
- 只设置一次方法中变量的值
- cppUnit:针对多个测试方法执行一次的设置函数
- 是否有一种方法可以在运行时停止循环重复一次不止一次
- 快速简单的方法,以C++为单位一次读取一个字节的 stdin
- 最简单的方法使多个指针一次指向同一位置,一次只处理2个位置
- C++菱形问题 - 如何仅调用一次基方法
- 搜索字符串是否至少包含一次从 0 到 9 的所有数字的最有效方法
- 当Bool值在UPDATE()方法中更改时,只有一次呼叫函数
- 有没有一种方法可以使全局函数/静态成员函数一次可呼出
- 有没有一种优雅的方法,根据用户输入只决定一次
- 如何确保方法在该对象的生存期内仅执行一次?
- 在方法中构造一个std:映射一次
- 只为NOT STATIC类的EACH对象调用一次方法
- 在继承层次结构中将方法定义为虚拟方法一次,以使多态性发挥作用
- C++将节点添加到链表的开头一次后失败.其他方法也有问题
- QTimer 每秒执行一次方法
- 如何只执行一次方法代码,尽管每帧调用一次
- 从类中只调用一次方法