Может быть, мне нужно взглянуть на некоторые из этих команд в отдельности, так что я знаю точно, что они делают? Я думаю, что это то, что происходит, во всяком случае, вот код, я работаю с, я был бы признателен за любую помощь вы можете дать мне фиксируя это будет означать, что я смогу сделать мои игры красиво и гладко, и оптимизировать их должным образом, и мы все знаю, что игровая индустрия нуждается в намного больше этого.
Мой код
котировка
#включают
#включают
#включают
Int основных ()
{
Окно С.Ф. :: RenderWindow (SF :: видеорежим (800, 600), "");
INT healthstats = 1;
научная фантастика :: Шрифт Arial;
если (! arial.loadFromFile ( "arial.ttf" ))
{}
здоровье научной фантастики :: RectangleShape (научная фантастика :: Vector2f (healthstats, 5));
health.setFillColor (научная фантастика :: Цвет :: Cyan);
health.setPosition (20, 10);
в то время как (window.isOpen ())
{
если (научная фантастика :: Клавиатура :: isKeyPressed (научная фантастика :: Клавиатура :: A))
{
health.setScale (healthstats, 5);
healthstats = healthstats - 1;
}
иначе если (научная фантастика :: Клавиатура :: isKeyPressed (С.Ф. :: Клавиатура :: D))
{
health.setScale (healthstats, 5);
healthstats = healthstats + 1;
}
событие С.Ф. :: Event;
в то время как (window.pollEvent (событие))
{
если (Event.type == С.Ф. :: Event :: Closed)
window.close ();
}
window.clear ();
window.draw (здоровье);
панель();
}
возвращать 0;
}
Пример кода для фиксации и задержки шага времени из книги
котировка
аннулируются игры :: Run ()
{
SF :: Часы часы;
научная фантастика :: Время timeSinceLastUpdate = SF :: Время :: Нулевая;
в то время как (mWindow.isOpen ())
{
processEvents ();
timeSinceLastUpdate + = clock.restart ();
в то время как (timeSinceLastUpdate > TimePerFrame)
{
timeSinceLastUpdate - = TimePerFrame;
processEvents ();
обновление (TimePerFrame);
}
рендеринга ();
}
}
Статья книга SFML я купил связан меня, чтобы помочь объяснить вещи лучше:
http://gafferongames.com/game-physics/fix-your-timestep/
Пример исходного кода из статьи
котировка
двойной Т = 0,0;
Const дважды дт = 0,01;
двойная CURRENTTIME = hires_time_in_seconds ();
двойной аккумулятор = 0.0;
Государственный предыдущий;
Государственный ток;
в то время как (! бросить курить)
{
двойной newTime = время ();
двойная frameTime = newTime - CURRENTTIME;
если (frameTime > 0.25)
frameTime = 0,25; // Примечание: максимальное время кадра, чтобы избежать спирали смерти
CURRENTTIME = newTime;
аккумулятор + = frameTime;
в то время как (аккумулятор >= Дт)
{
previousState = CurrentState;
интеграции (CurrentState, т, дт);
T + = дт;
Аккумулятор - = дт;
}
Const двойной альфа = Накопитель / дт;
Государственное состояние = CurrentState * альфа + previousState * (1,0 - альфа);
рендеринга (состояние);
}