今天看了,ActionManagerTest的例子,做一下总结。
这里面总共有6个Test,都比较简单,介绍了一些ActionManager的功能。
1.CrashTest
崩溃测试,这个测试是来测试崩溃的,在这个测试中用到的例子是为一个节点添加两个同样时长的Action,为这个节点的父节点也添加一个这样的Action,程序能够正常的运行,没有崩溃,说明引擎是支持这样的操作的。
2.LogicTest
逻辑操作,这个测试解释的是一个逻辑问题,当一个节点执行过一次stopAllActions的操作后,再次执行是没有任何作用的,当然,前提是两次调用之间没有添加新的动作。
3.StopAllActionTest
这个也是一个停止动作的测试,不过这个测试有一点不同是,根据多做的Tag来停止动作,节点的其他动作不受影响。这个功能的用途应该是很广泛的,在实际应用中可以直接照搬这种方法,给需要停止的动作添加Tag,不需要的时候直接停止就好了,需要的时候再resume。
4.ResumeTest
重启测试,这个是在一个动作停止后,重启动作的一个测试。用到了Schedule重启动作。也是一个很有用的例子。我们可以为节点的动作加上Tag,需要那个动作就resume哪个动作,当然,到底需要启动那个动作应该是根据项目来决定的,大部分时候应该是有一个状态机来控制的。
5.StopTest
停止测试,这个特殊之处在于,在一个sequence中的自动作中停止整个sequence动作。引擎是允许这样的操作的,不崩溃。
6.PauseTest
暂停测试,这个测试是我感觉这几个测试中限制最多的测试,虽然,我还不知道为什么有这么多限制。做这个操作,必须在onEnter函数中进行,不能够在init函数中进行,除非被暂停的action是在‘onEnter’的时候启动,这个限制还是很苛刻的。
下面总结一些在这个Test中感觉有用的代码:
1.CrashTest
1: runAction( Sequence::create(
2: DelayTime::create(1.5f),
3: CallFunc::create( CC_CALLBACK_0(CrashTest::removeThis,this)),
4: nullptr)
5: );
6:
7: void CrashTest::removeThis()
8: {
9: _parent->removeChild(this,true);
10:
11: nextCallback(this);
12: }
2.LogicTest
2: MoveBy::create(1,Vec2(150,0)),monospace; direction:ltr; border-top-style:none; color:black; border-right-style:none; font-size:8pt; overflow:visible; padding-top:0px"> 3: CallFuncN::create(CC_CALLBACK_1(LogicTest::bugMe,monospace; direction:ltr; border-top-style:none; color:black; border-right-style:none; font-size:8pt; overflow:visible; padding-top:0px"> 4: nullptr)
5: );
6: void LogicTest::bugMe(Node* node)
7: {
8: node->stopAllActions(); //After this stop next action not working,if remove this stop everything is working
9: node->runAction(ScaleTo::create(2,2));
10: }
//这段代码中有CallFuncN的另一种用法。