我需要让我的射弹与时间有关。以及精灵动画。
目前我的子弹代码如下。它们似乎与时间无关。说实话,我对此感到非常困惑。
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);
}
}
此致 安迪
答案 0 :(得分:0)
由于您未显示updateBulletCollisions
被调用,我的猜测是sf::Time dt
是一个增量,即自上次调用以来经过的时间。
如果以恒定速率(例如50赫兹)调用updateBulletCollisions
函数,则设置tbulletvel
的计算结果将始终为您提供相同的值。
相反,您需要_arr_bullet_spr[i].move(_arr_bullet_spr[i].pos + tbulletvel)
之类的内容,或传递绝对时间(例如sf::Time elapsedTime
)而不是delta。