ACTION相关,动态添加动作???如何实现??

auto litte2=Sprite::create(“anything”);
MoveBy *myby = MoveTo::create(3, ccp(200, 100)); //注意这里需要3秒
myby->setTag(1231);
myby->retain();
litte2->runAction(myby);
auto myby2 = MoveTo::create(2, ccp(400, 200)); //这个动作时间2秒
myby2->retain();
scheduleOnce([&,litte2,myby2,myby](float dt) {
litte2->pause();
litte2->getActionManager()->pauseTarget(litte2);
FiniteTimeAction my = static_cast<FiniteTimeAction>(litte2->getActionByTag(1231));
auto seqaa = Sequence::create(my, myby2, NULL);
litte2->getActionManager()->resumeTarget(litte2);
litte2->runAction(seqaa);
}, 1.0f,“myonce”); //这个动作添加 在1秒后


这个实现 ,初看好像是添加了,但是, 这个添加的动作是一个全新的,不是继承于myby已经移动了1秒基础上的, 他在新动作移动到ccp(200, 100) 时,在已经移动一秒的基础上,重新用了3秒钟。这不是我需要的,我希望能够继承前一个动作,目前未找到好方法,我知道,可以通过计算剩余时间上 用3-1=2 秒 的时间从新绑定一个动作,移除原来的动作,来解决这个问题!但是我想要继承我以前的动作! 暂时我不知道更好的办法, 我认为出现这个的原因可能是因为,计时器的绑定问题,前一个动作的已用时间 ,新的Sequence无法智能的获取,并计算到新动作中,导致的,这只是我的推测。官方有没有这样的函数,动态新增动作的,如果有能告知一下么,如果没有,那我就自己实现了。计算剩余距离与速度,得到时间,重新绑定新动作,这样看上去是一样的,但是本质却完全不同。

希望能回答我两个问题,一个是出这个问题的原因是什么,我的推测是否正确。
个是,如何在获取前一个动作之后,继续动态的添加新的动作,而不必等前一个动作结束,官方推荐的做法是什么!!

新创建的 Sequence 会对包含的 Action 的数据进行时间分配的判断,并且记录分配时间比例,litte2执行 runAction 的时候,当前的 target 就会重新计算 Sequence 内的分配时间,不会保留上一次的记录,你现在重新生成的 sequence 包含 my 内容就是告诉 litte2 移动到 ccp(200,100) 执行时间为 3s 。(大概。。。应该),
你要是有延迟动作的话,我建议还是使用 DelayTime 外加 callFunc 执行新的 Action

你好,你没理解我的意思。。
不是延迟动作,是动态动作添加。
延迟动作,你还是在一个动作队列里面。
我的意思是,在你一个动作队列未完成的情况下,在后面追加动作!

那我这么说吧。。。。
我觉得你这个动态添加动作应该要你自己进行一个时间的计算,不然应该是实现不出来的。。。。大概

说需求

时间计算的方法,我已经实现了,重新绑定一个动作队列,把前一个动作时间,改为总时间-已移动时间,这个方式可以实现。但是我想问问,能不能在不打断前一个动作,直接在前一个动作队列尾部追加一个新的动作队列队列。

上一个runAction 不停下,直接调新的runAction 不好使,精灵乱跑, 追runAction到


怎么重载runAction,让他在动作执行状态下,就自动把新 动作队列 添加到 正在执行的动作队列尾部,直接执行?

说需求,你要实现什么效果

:joy:简单粗暴。。。

额,是我第一个回答没有让你 get 到点。。。
Sequence 生成的时候就已经建立好了动作二叉树以及动作时间分配,然后 runAction 是通过遍历执行当前动作。runAction 的行为不会影响到 Sequence 内容

已经说的很清楚了,稍微理解一下哈

为啥不能改?? 初始化,时间、动作队列 有了:

传递给动画管理器的过程也有了

动画管理器的怎么来跑个动作队列,也有了

我可以找到这些点,不过水平有限不知道怎么穿针。 我觉得能够,直接在动作管理器,里面给这个对象的动作队列尾部追加action,不用打断或者重新绑定一个。

你可以尝试着了解一下引擎的action设计以及源码
https://blog.csdn.net/honghaier/article/details/8197892

已经解决了,在逻辑与UI分开后,发现没有追加行动的需求了。。。

逻辑跟界面分离会不会性能损耗严重啊

耗损肯定有的,不过程度是微量的,肯定不到严重的程度哈