这也是群里问的一个问题。。。。 第一反应 [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; |
iphone开发笔记——Cocos2d 如何暂停一个动作
最新推荐文章于 2022-10-11 17:58:19 发布