运动序列后触发粒子
代码part1
CCActionMoveTo *moveTo = [CCActionMoveTo actionWithDuration:0.2f position:nextPosition];
CCActionRemove *remove = [CCActionRemove action];
CCActionSequence *sequence = [CCActionSequence actionWithArray:@[moveTo,remove]];
[mySprite runAction:sequence];那么,我想像下面这样启动这个代码。
代码part2
CCParticleSystem *mergePart1 = (CCParticleSystem *)[CCBReader load:@"MergePart1"];
mergePart1.autoRemoveOnFinish = TRUE;
mergePart1.position = mySprite.position;
[game.parent addChild:mergePart1];在runAction:sequence完成之后,我如何执行这个语句?
发布于 2014-07-01 14:57:29
使用CCCallFunc将函数调用包装在CCAction中。
CCAction* nextStepAction = [CCCallFunc actionWithTarget:self selector:@selector(nextStep)];
CCActionSequence *sequence = [CCActionSequence actionWithArray:@[moveTo,remove, nextStepAction]];您需要将“代码第2部分”封装在一个名为nextStep的独立方法中(如果您喜欢使用不同的名称,则更改操作定义)。
希望这能有所帮助。
编辑:
在cocos2d v3上,您可以使用
CCActionCallFunc具有类似的语法,或
CCActionCallBlock你可以这样定义:
CCAction *nextStepAction = [CCActionCallBlock actionWithBlock:^{
<code part2 here>
}];发布于 2014-07-02 14:52:11
我正在为Cocos2d和cocos2d-x发布解决方案,因为每个人都应该切换到Cocos2d-x,因为它为iOS和Android都编译,没有额外的移植,以防使用Cocos2d-x的人遇到同样的问题。
在Cocos2d-x中,我将从一个元调用函数:
Sequence::create(MoveTo::create(1.0, Point(100, 200))),
CallFunc::create([&](){HelloWorld::myFunction()},
null);在Cocos2d中,我会这样做:
[CCSequence actions:
[CCMoveTo actionWithDuration:1.0 position:ccp(100, 100)],
[CCCallFuncN actionWithTarget:self selector:@selector(myFunction:)],
nil];如果您不想把它放在一个函数中(就像它只是一次使用),那么按照您的风格,您应该能够这样做:
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这样的操作:
[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
]];https://stackoverflow.com/questions/24513219
复制相似问题