这也是群里问的一个问题。。。。
第一反应 [node stopActionByTag: ];
后来发现 不对吖。。。。这样是 stop 而不是 暂停吖。。
然后想暂停和继续是什么东西呢? 是 pause 和 resume
然后去看ccnode的头文件,你会发现 只有 pauseAllScheduleAndActions 这个选项 可没有 by tag了。。
这不就神奇了么。。。。这么简单的问题 居然没有接口来实现它。。。。
那么就去看了下CCAction 的头文件
里面有:
+(id) action;
-(id) init;
-(id) copyWithZone: (NSZone*) zone;
-(BOOL) isDone;
-(void) startWithTarget:(id)target;
-(void) stop;
-(void) step: (ccTime) dt;
-(void) update: (ccTime) time;
也没有 pause。。那么 有没有可能 stop 后 在通过 update 或者 step 重新运行呢。。。
试了半天 无果
然后就又去试了一下 stop 之后的 isDone。。
结果发现返回的仍然是NO
也就是说 如果我的动作没有完全运行到底的话 他是不会认为已经结束了。。。
那么 既然 isDone 返回的是no 那么再runaction 一次 不就好了么。。。
然后就崩溃了。。throw出来的信息是 这个动作已经在这个node中运行
于是就好奇了吖。。。。然后又去看了一下头文件:
在stop 那里写着
//! called after the action has finished. It will set the 'target' to nil.
//! IMPORTANT: You should never call "[action stop]" manually. Instead, use: "[target stopAction:action];"
不去管它 语法,分析虚拟语气什么的 好无聊的。。
说的就是 这么个意思。。。不要手动用action stop 用 target stop。。。
然后就改成了target stop 再target runaction。。。问题解决了。。
测试用demo
if( (self=[super init])) {
CCSprite* sprite = [CCSprite spriteWithFile:@"Icon.png"];
sprite.position = ccp(100, 100);
CCMoveBy *move = [CCMoveBy actionWithDuration:10 position:ccp(300, 300)];
[sprite runAction: move];
[self addChild:sprite];
flag = true;
CCMenuItemImage* button = [CCMenuItemImage itemFromNormalImage:@"Icon.png" selectedImage:@"Icon.png" block:^(id sender) {
if (flag)
{
[sprite stopAction:move];
}
else
{
[sprite runAction:move];
}
flag = !flag;
}];
button.position = ccp(50, 50);
CCMenu *menu = [CCMenu menuWithItems:button, nil];
menu.position = CGPointZero;
[self addChild:menu];
}
return self;