Я изменил свою физику из последнего поста: Обновление физического движка в отдельном потоке, разве это разумно? примерно так:
public void PhysicsThread()
{
int milliseconds = TimeSpan.FromTicks(333333).Milliseconds;
while(true)
{
System.Threading.Thread.Sleep(milliseconds);
world.Step(milliseconds / 1000.0f);
}
}
Как и прежде, он работает самостоятельнонить.Я нахожу что-то странное, что я не уверен, что я полностью понимаю, это немного сложно объяснить, поэтому я сделал видеозапись этого: http://www.youtube.com/watch?v=qFf6oSRfVt8
Если вы посмотрите внимательно, вы увидите, что объектвыстрел из пушки иногда заикается и, кажется, движется назад на заданное расстояние.Это заметно только на быстро движущихся объектах (таких как стреляющий снаряд).
Это полностью сбило меня с толку.Я даже создал систему, в которой я кеширую положение тел в игровом логическом потоке, так что, поскольку физический поток может обновлять позиции тел, это не повлияет на позиции, считываемые игровой логикой, пока не будет вызвана функция обновления внутриигровая логическая нить, которая обновляет позиции физических тел для чтения игровой логики.
Есть идеи, какой аспект многопоточности может вызывать эту проблему?Я не думаю, что это физический движок, обновляющий позиции тел во время игровой логики и рисования, как я уже упоминал, я кеширую это, и оно остается постоянным на протяжении всего ...