2016-02-29 73 views
1

我对C++/Cocos2d非常陌生,但我一直在取得相当不错的进展。 :)Cocos2D BezierBy随着时间的推移不断增加的速度

我想要做的是在玩家获得它之后,让一个硬币从屏幕上掉下来。我已经成功实现了两种不同的方式,但每种方式都有其主要缺点。

目标:玩家获得一枚硬币后,硬币应该“跳跃”,然后从屏幕上“跌落”。理想情况下,硬币就好像受到重力作用一样,因此它以一个快速的速度跳起,减速到停止,然后继续以增加的速度向下。

尝试至今:

void Coin::tick(float dt) { 
    velocityY += gravity * dt; 
    float newX = coin->getPositionX() + velocityX; 
    float newY = coin->getPositionY() + velocityY; 
    coin->setPosition(newX, newY); 
    // using MoveBy(dt, Vec2(newX, newY)) has same result 
    } 
    // This is run on every 'update' of the main game loop. 

这种方法,我想也正是它做的尽可能的运动,然而,帧速率变得非常不连贯,它开始帧之间“跳”,有时相当显着的距离。

ccBezierConfig bz; 
    bz.controlPoint_1 = Vec2(0, 0); 
    bz.controlPoint_2 = Vec2(20, 50); // These are just test values. Will normally be randomized to a degree. 
    bz.endPosition = Vec2(100, -2000); 
    auto coinDrop = BezierBy::create(2, bz); 
    coin->runAction(coinDrop); 

这其中有“完美”的帧率,在没有抖动现象任何的好处,但是,它移动在其废墟它掉落的经验以恒定的速率,只是使它看起来像它的随意一起移动一些设定的路径。 (这是,它是。)

有没有人遇到类似的情况或知道修复?要么更好地处理第一个的帧速率(MoveBy/To不工作 - 仍然有波涛汹涌的效果)或以编程方式设置第二个的速度(改变曲线中某些点的速度)

我的另一个想法是使用一些不同的速度不同的MoveBy动作,但是这会产生尴尬的“尖尖”曲线和速度的尴尬变化,所以不是真正的解决方案。

任何想法/帮助是/非常感谢。 :)

回答

0

是的,我遇到了类似的情况。这就是'放松'派上用场的地方。有许多内置的缓动功能可供您使用,例如缓入或缓出。所以,你的新的代码看起来是这样的:

coin->runAction(cocos2d::EaseBounceOut::create(coinDrop));

此页面显示几种常见的宽松方法图表: http://cocos2d-x.org/docs/programmers-guide/4/index.html

你的目的(增加速度随着时间的推移)我会建议您尝试了“ EaseIn'方法。

相关问题