Хм, очень много кода получается, поэтому то я и попросил сделать "простой пример, без заморочек" исходя из ваших данных, а не моих.
Дело в том, что у меня используются такие функции как motion_add и вообще многое работает на такого рода упрощённых векторах, вместе с тем у вас этот вопрос не рассматривался, у вас скорости статичные, поэтому если повторять всё "1 в 1" очевидно что мы никогда не придём к моим проблемам с некорректными вычислениями.
В результате у меня всё идёт хорошо после внедрения global.delta до того момента пока не начинается "частичное" изменение скорости - т.е. не 0/1, а 0.5 например.
Но рас уж пример всё равно никто делать не собирается, попытаюсь объяснить простым языком, как я дошёл до такого эффекта.
global.t=global.pause*global.timescale*(delta_time/16666)
dtPrevious = dt;
dt = delta_time/1000000;
if (dt > 1/minFPS)
{
if (dtRestored)
{
dt = 1/minFPS;
}
else
{
dt = dtPrevious;
dtRestored = true;
}
}
else
{
dtRestored = false;
}
global.delta = 60*dt*timeScale;
minFPS = 10;
timeScale = 1.0;
dt = delta_time/1000000;
dtPrevious = dt;
dtRestored = false;
global.delta = 60 * dt;
Затем я понял, что смысла хранить направление и скорость мало, т.к. каждый следующий motion_add изменяет вектор так, что легче всего мне было хранить данные в формате горизонтальной (hsp) и вертикальной (vsp) скорости. Поэтому я считал "как раньше", а в конце step'а просто обнулял скорость, сохранив предварительно полученный импульс:
hsp+=hspeed;
vsp+=vspeed;
speed = 0;
x+=hsp*global.delta;
y+=vsp*global.delta;
В общем всё довольно сложно, у всех свои идеи свой подход к коду, поэтому я и просил "простой пример того, что вы делаете, что всё работает" - в едином посте, а не разрозненно, а то честно говоря я еле собрал то, что было написано. Если так не хочется "Добавлять файл" с простым проектом, можете описать пример как я - что в create, что в step и т.д.
Надеюсь на понимание.