首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >runAction后触发粒子

runAction后触发粒子
EN

Stack Overflow用户
提问于 2014-07-01 14:48:12
回答 2查看 257关注 0票数 0

运动序列后触发粒子

代码part1

代码语言:javascript
复制
CCActionMoveTo *moveTo = [CCActionMoveTo actionWithDuration:0.2f position:nextPosition];
CCActionRemove *remove = [CCActionRemove action];

CCActionSequence *sequence = [CCActionSequence actionWithArray:@[moveTo,remove]];
[mySprite runAction:sequence];

那么,我想像下面这样启动这个代码。

代码part2

代码语言:javascript
复制
CCParticleSystem *mergePart1 = (CCParticleSystem *)[CCBReader load:@"MergePart1"];
mergePart1.autoRemoveOnFinish = TRUE;

mergePart1.position = mySprite.position;
[game.parent addChild:mergePart1];

在runAction:sequence完成之后,我如何执行这个语句?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-01 14:57:29

使用CCCallFunc将函数调用包装在CCAction中。

代码语言:javascript
复制
CCAction* nextStepAction = [CCCallFunc actionWithTarget:self selector:@selector(nextStep)];
CCActionSequence *sequence = [CCActionSequence actionWithArray:@[moveTo,remove, nextStepAction]];

您需要将“代码第2部分”封装在一个名为nextStep的独立方法中(如果您喜欢使用不同的名称,则更改操作定义)。

希望这能有所帮助。

编辑:

在cocos2d v3上,您可以使用

代码语言:javascript
复制
CCActionCallFunc

具有类似的语法,或

代码语言:javascript
复制
CCActionCallBlock

你可以这样定义:

代码语言:javascript
复制
CCAction *nextStepAction = [CCActionCallBlock actionWithBlock:^{
    <code part2 here>
}];
票数 1
EN

Stack Overflow用户

发布于 2014-07-02 14:52:11

我正在为Cocos2d和cocos2d-x发布解决方案,因为每个人都应该切换到Cocos2d-x,因为它为iOS和Android都编译,没有额外的移植,以防使用Cocos2d-x的人遇到同样的问题。

在Cocos2d-x中,我将从一个元调用函数:

代码语言:javascript
复制
Sequence::create(MoveTo::create(1.0, Point(100, 200))),
                 CallFunc::create([&](){HelloWorld::myFunction()},
                 null);

在Cocos2d中,我会这样做:

代码语言:javascript
复制
[CCSequence actions:
   [CCMoveTo actionWithDuration:1.0 position:ccp(100, 100)],
   [CCCallFuncN actionWithTarget:self selector:@selector(myFunction:)],
   nil];

如果您不想把它放在一个函数中(就像它只是一次使用),那么按照您的风格,您应该能够这样做:

代码语言:javascript
复制
CCActionMoveTo *moveTo = [CCActionMoveTo actionWithDuration:0.2f position:nextPosition];
CCActionRemove *remove = [CCActionRemove action];
CCAction *particles = [CCCallBlock actionWithBlock:^{
    CCParticleSystem *mergePart1 = (CCParticleSystem *)[CCBReader load:@"MergePart1"];
    mergePart1.autoRemoveOnFinish = TRUE;
    mergePart1.position = mySprite.position;
    [game.parent addChild:mergePart1];
  }];


CCActionSequence *sequence = [CCActionSequence actionWithArray:@[moveTo,remove,particles]];
[mySprite runAction:sequence];

会在一个序列中起作用。(我对单独定义粒子的作用有点不确定,但是,定义在物体范围之外的其他物体上有一些有趣的东西)。

就我个人而言,我不喜欢在调用它之前定义它--如果我只调用它一次,我会使用CCSequence这样的操作:

代码语言:javascript
复制
[mysprite runaction:[CCSequence actions:
                     [CCMoveTo actionWithDuration:0.2f position:nextPosition],
                     [CCActionRemove action], //not sure what this does
                     [CCCallBlock actionWithBlock:^{
    CCParticleSystem *mergePart1 = (CCParticleSystem *)[CCBReader load:@"MergePart1"];
    mergePart1.autoRemoveOnFinish = TRUE;
    mergePart1.position = mySprite.position;
    [game.parent addChild:mergePart1];
                     }],
                     nil
                   ]];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24513219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档