MailRuChamps / raic-2019

Russian AI Cup — artificial intelligence programming contest. Official website: http://russianaicup.ru
GNU General Public License v3.0
73 stars 45 forks source link

Неправильные тайминги #43

Open ud1 opened 4 years ago

ud1 commented 4 years ago

Assault rifle должно стрелять раз в 600 микротиков, а на деле 601. Вызвано ошибками округления в таймерах, в конце, когда должен получаться 0, на деле получается малое число большее 0, и оно сжирает лишний микротик. Стоит вычитать у всех таймеров EPS (или перейти на целые времена измеряемые в микротиках, но это изменение сетевого протокола, вероятно нежелательно)

MrSmile commented 4 years ago

Да, сейчас для прыжков приходится тоже +1 добавлять. Вообще, уж платформер стоило бы сделать на целых числах целиком, чтобы раз и навсегда избавиться от ошибок округления.

tyamgin commented 4 years ago

В добавок про эпсилоны. Не знаю пока как это может повлиять (наверное никак), но прибавлять эпсилоны к координатам и выносить это наружу, точно не стоило. Если это ради проверок на пересечение с тайлами, но эпсилоны можно прибавлять/отнимать только в момент проверки, в зависимости от того, левую/нижнюю или правую/верхнюю границу проверяем.

ud1 commented 4 years ago

Движение игрока я вчера вроде как точно восстановил, вроде явных огрехов не помню. А эпсилоны это пылинки так учитываются (хотя на деле скорей всего, чтоб батут не срабатывал, когда не надо), в принципе норм подход.

kuviman commented 4 years ago

Кажется чем меньше использований EPS, тем лучше. Сейчас только там где иначе были бы явные косяки

ud1 commented 4 years ago

Ну тут явная ошибка, во всех таймингах таких как перезараядка оружия, время можно было измерять целыми числами в микротиках, но зачем-то сделали double, и из-за этого проблемы. Получается тут надо использовать поправки на eps.

mortido commented 4 years ago

Сейчас еще скажут, что у них и математики нет)