我对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
动作,但是这会产生尴尬的“尖尖”曲线和速度的尴尬变化,所以不是真正的解决方案。
任何想法/帮助是/非常感谢。 :)