我對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
動作,但是這會產生尷尬的「尖尖」曲線和速度的尷尬變化,所以不是真正的解決方案。
任何想法/幫助是/非常感謝。 :)