让射弹与时间SFML C ++相关

时间:2015-03-23 11:19:13

标签: c++ time sfml

我需要让我的射弹与时间有关。以及精灵动画。

目前我的子弹代码如下。它们似乎与时间无关。说实话,我对此感到非常困惑。

struct BulletData
{
    sf::Vector2f direction; 
    sf::Vector2f startpos;  
    float        speed;     
    bool         active;    
    BulletData()
    {
        direction = sf::Vector2f(0.0f,0.0f);
        startpos = sf::Vector2f(0.0f,0.0f);
        speed    = 600000.0f;
        active   = false;
    }
};
        sf::Time        dt; // delta time
    sf::Time        elapsedTime;

    sf::Clock clock;

    elapsedTime += dt;
    int timeAsMs = elapsedTime.asMilliseconds(); 
        dt = clock.restart();


 void Game::updateBulletCollisions(sf::Time dt)
{

    for (int i = 0; i < NO_BULLETS; i++)
    {
        if (this->_arr_bullet_data[i].active)
        {
            sf::Vector2f tbulletvel = this->_arr_bullet_data[i].direction * this->_arr_bullet_data[i].speed * dt.asSeconds();
            this->_arr_bullet_spr[i].move(tbulletvel);
       }
}

此致 安迪

1 个答案:

答案 0 :(得分:0)

由于您未显示updateBulletCollisions被调用,我的猜测是sf::Time dt是一个增量,即自上次调用以来经过的时间。

如果以恒定速率(例如50赫兹)调用updateBulletCollisions函数,则设置tbulletvel的计算结果将始终为您提供相同的值。

相反,您需要_arr_bullet_spr[i].move(_arr_bullet_spr[i].pos + tbulletvel)之类的内容,或传递绝对时间(例如sf::Time elapsedTime)而不是delta。