読者です 読者をやめる 読者になる 読者になる

developer_RYO’s blog

スマホアプリやPCゲーム、音楽やイラストを自由気ままに作っている人の技術ログです

ProgressTimerの_percentageは上限が100、下限が0

確認したバージョン・・・cocos2d-x-3.7.1

プログレスバー周りで
percentが0未満になったらプログレスバーを消すコードを書いたのですが、うまく動作せず。。。

void MainScene::updateReadyProgress(float dt)
{
    //終了した時や、ゲーム状態が合わない時は処理しない
    if(state != STATE::INIT) return;
    if(readyProgress->getPercentage() <= 0) return;
    
    readyProgress->setPercentage(readyProgress->getPercentage() - 50.0f * dt);
    
    //↓の処理が走らない
    if(readyProgress->getPercentage() < 0){
        
        this->removeChild(readyProgress);this->removeChild(readyLabel);
        
        //ゲームプレイ開始
        state = STATE::RUN;
        if(state == STATE::RUN) printf("runになりました");
    }
}

原因は、percentの値がclampsで丸められているためであった。。
下記はcocosのsetPercentage。

void ProgressTimer::setPercentage(float percentage)
{
    if (_percentage != percentage)
    {
        _percentage = clampf(percentage, 0, 100);
        updateProgress();
    }
}

ということで、条件分岐するところを「未満」から「以下」に変更して解決!

//↓の処理が走らない
    if(readyProgress->getPercentage() <= 0){

変数のとりうる値を制限しておく処理、大事だなと思った。
150%とか-20%とか取ったらどんな処理になるんだろうか。恐怖。