我希望在屏幕上显示一个带有时间限制的警告信息(例如在游戏中)。
我的意思是,是否可以使用SFML在屏幕上显示一个只持续10秒钟的精灵?如果是,那么该如何实现?
public:
warning(){
_isVisible = true;
_warn = sf::CircleShape(10.f);
_warn.setFillColor(sf::Color::Red);
}
void checkTime(){
if(_timeForWarn - _timer.getElapsedTime().asSeconds() <= 0){
_isVisible = false;
}
}
void RestartTime(){
_timer.restart();
}
bool GetVisibility(){
return _isVisible;
}
sf::CircleShape getWarnObj() const{
return _warn;
}
private:
sf::CircleShape _warn;
bool _isVisible = false;
sf::Clock _timer;
float _timeForWarn = 3.f;
然后,只需使用
w.checkTime();
if(w.GetVisibility()){
window.draw(w.getWarnObj());
}
是的,这是可能的。最简单的方法是使用 sf::Clock 类:
//Do have in mind sf::Clock starts counting from creation of object, use reset function to start it from anytime you want.
class dissapearingOBject
{
public:
sf::RectangleShape rect; // the visual part of the object
sf::Clock timer; //the timer
int dissTime; // the time to dissapear at in milliseconds
dissapearingOBject(int time = 10000) : dissTime(time)
{
}
dissapearingOBject()
{
}
void resetTimer()
{
timer.restart();
}
int getTimer()
{
return timer.getElapsedTime().asMilliseconds();
}
void draw(sf::RenderWindow &window)
{
if (getTimer() < dissTime)
{
window.draw(rect);
}
}
};
std :: function
存储),该队列在运行时循环中进行检查。 - Scheff's Cat