如何减慢CCMoveTo?

时间:2013-08-07 18:52:37

标签: ios cocos2d-iphone

我对精灵有CCMoveTo个动作,它正在从一个点移动到另一个点。当用户点击按钮时,精灵应该轻松减速并继续以新的速度移动到目标位置。我不知道如何实现这一目标。

更新。实际上我将CCMoveTo替换为CCMoveBy,但问题仍然相同。

5 个答案:

答案 0 :(得分:3)

使用当前实施的CCEaseIn/CCEaseOut操作,您只能将操作速率从零减少到零。这意味着如果你放松CCMoveBy/CCMoveTo,它们会使移动速度从静止状态变为缓慢。

但是,从cocos2d 2.1 CCMoveBy/CCMoveTo are stackable开始。使用此功能,您可以实施一种可以产生所需效果的变通方法。

为精灵设置并同时运行两个CCMoveBy个动作:actionA将会在按下按钮后获得较慢的移动速度。 actionB的速度对应于速度越快和速度越慢的差异。

然后,当用户按下按钮时,您可以CCEeaseOut actionB(停止CCMoveBy,然后使用所需的CCEaseOut再次启动它。这看起来像精灵从actionA + actionB的移动速度到actionA的速度变得缓和。


尽管有这样的解释,如果您要实现想要精确调整的游戏控件,最好避免使用CCActions并通过实现自定义移动代码逐帧更新精灵位置。

答案 1 :(得分:2)

您可以使用EaseIn / Out操作来获得该效果:

id action = [CCMoveTo actionWithDuration:2 position:ccp(100,100)];
id ease = [CCEaseIn actionWithAction:action rate:2];
[sprite runAction: ease];

取自here

您可以找到不同类型的宽松空间以满足您的需求。

答案 2 :(得分:2)

要动态更改CCMoveBy / CCMoveTo的速度,您可以实施CCSpeed操作。

首先,在添加CCMoveBy操作时,将其包装在CCSpeed操作中,如下所示:

CCSpeed *action = [CCSpeed actionWithAction:[CCMoveBy actionWithDuration:myDuration position:ccp(xPos,yPos)] speed:1];
action.tag = 42;
[mySprite runAction:action];

然后,当您希望修改速度时,获取CCSpeed操作并对其进行修改:

CCSpeed *action = (CCSpeed*)[mySprite getActionByTag:42];
[action setSpeed:6];

答案 3 :(得分:0)

CGPoint startPoint = ccp(10,100);
CGPoint endPoint = ccp(300,100);
float fastTime = 5.f;

CCSprite *sp = [CCSprite spriteWithFile:@"sprite.png"];
sp.position = ccp(10,100);
[self addChild:sp];
[sp runAction:[CCMoveTo actionWithDuration:fastTime position:endPoint]];

//on hit
float slowTime = 10.f;
[sp stopAllActions];
float newSlowTime = ccpDistance(sp.position, endPoint)*slowTime/ccpDistance(startPoint, endPoint);
[sp runAction:[CCMoveTo actionWithDuration:newSlowTime position:endPoint]];

答案 4 :(得分:0)

您可以通过ccactionmoveto替换ccmoveto操作,如:

 CCActionMoveTo *mAction = [CCActionMoveTo actionWithDuration:0.2f position:_selectedSpritePos];

    [_selectedSprite stopAllActions];
    [_selectedSprite runAction:mAction];