连续两次runAction(RotateBy) 第一次 没执行

auto pRotate1 = RotateBy::create(2, -90);
auto pRepeatRotate1 = Repeat::create(pRotate1, 1);

auto pRotate = RotateBy::create(2, 360);
auto pRepeatRotate = RepeatForever::create(pRotate);

auto hour = Sprite::create("h.png");
hour->setAnchorPoint(Vec2(0.8, 0.3));
hour->setPosition((Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)));
this->addChild(hour, 2);


hour->runAction(pRepeatRotate1);   //第一次 runAction

hour->runAction(pRepeatRotate);     //第二次 runAction,两次调用的 都是RotateBy

这里的作用是,我要把 闹钟指针的图片 让他指向0:00的位置,而闹钟图片开始位置不在0:00位置,所以先让他旋转至0:00位置,再根据现在实际时间 旋转对应的角度(这里举例子暂且用了360°)

连续两次runAction 你会发现 第一次 完全没执行,没执行,没执行
有的人 可能会说 你用Sequence啊
大家注意 我第一个RotateBy只执行一次 为了调整时针的初始位置。
第二个RotateBy要 永远执行下去,所以没法使用Sequence,因为第二个要设置为 RepeatForever.
我觉得我把问题说的很清楚了,请说不清真正原因的网友不要把猜测或者臆想随便当做答案来答复。谢谢。

事实上 不仅仅是RotateBy任何一模一样的 动作连续执行两边 都没有按照预想的执行成功,都有问题,这里就好像你 先+1,再-1 结果它给你合并运算了

这个问题就像我先叫跑,然后当你脚刚抬起来又叫你走,那你现在是走还是跑?那如果我先叫你跑,之后又叫你一直挥手,那你是不是可以完成?
都是旋转,你叫电脑什么玩:12:
如果你把第一个动作换成移动或者跳跃都可以:13:

然后为什么你觉得不能用Sequence?你可以用回调函数来做啊,当第一个动作完后才开始执行第二个…
教程拿去,不谢!在最下面有方案搞定虽然是2.X得,不过原理都一样
http://blog.csdn.net/jackystudio/article/details/17019023

:13:多谢大神的帮助 感激不尽 我刚学习 还不怎么熟练 一定好好看教程 非常感谢 给您320个赞

您说的很有道理 想想确实是这个道理哎

还要说明一点,不是我不在sequence里用
auto pRototeHourTo = RotateBy::create(0.0001, 55 + H_HOUR_ANGLE*(current_time->tm_hour%12) + H_MINUTE_ANGLEcurrent_time->tm_min + H_SECOND_ANGLEcurrent_time->tm_sec);
auto pRotateSecond = RotateBy::create(60, 360);
auto pRepeatRotateSecond = RepeatForever::create(pRotateSecond);
auto seqHour = Sequence::create(pRototeHourTo,pRepeatRotateHour, nullptr);

auto hour = Sprite::create(“h.png”);
this->addChild(hour, 2);
hour->runAction(seqHour);
而是 用Sequence也一样有问题,因为 它没有执行 pRepeatRotateHour 所以 指针在移动到 正确的位置后(执行一次),并没有按照预想的 执行(连续移动动画),反而 我不用连续动画pRepeatRotateHour ,而使用 RotateBy pRepeatRotateSecond , 这样反而 能正常走一个360°,但是我们要的不是360°,是永远转下去,所以 Sequence也不行的哦

写个lua的写法,c++难得写,效果是1分钟转一圈,一直转
local function rotate()
node:runAction(cc.Sequence:create(cc.RotateBy:create(1, 6), cc.CallFunc:create(rotate)))
end
rotate()

嗯啊 这个 我按照你给的例子 已经成功了 我这里只是说说 Sequence的问题,CallFunc还是很强大的,谢谢版主。好人工资翻10倍。

Sequence里面不能有 forever动画吧

:877::877::877:

是不能有,都是可以有CallFunc

auto rot1 = RotateBy::create(1, Vec3(0, 90, 0));
_player->runAction(rot1);

这个roatateby执行是怎么回事 我的是3.6

我是说rotateby没有执行