iphone开发笔记——Cocos2d 如何暂停一个动作

 

这也是群里问的一个问题。。。。

第一反应 [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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值