C ++ gamedev: усечение float до int

Я делаю игру на C ++ где танк, который может двигаться по сцене. У танка есть угол (поплавок в градусах, и я предполагаю, что танк находится под 0º, когда его пушка направлена ​​вправо), скорость (поплавок) и постоянная времени, называемая «deltaT» (плавание).

Когда игрок перемещает танк вперед, я использую тригонометрию и физическое уравнение положения в зависимости от времени (я имею в виду X (t), я не знаю, как это написано по-английски), чтобы вычислить новый танк. координаты в сцене.

Это моя проблема: из-за перехода от float к int значения, наиболее близкие к нулю, не учитываются. Таким образом, под определенными углами танк кажется повернутым, но движется в другом направлении.

Это то, что делает мой код:

1 - сначала я разделяю скорость на ее компоненты X и Y, используя угол, под которым движется танк:

    float speedX = this->speed * cos(this->angle);
    float speedY = this->speed * sin(this->angle);

2 - затем используйте уравнение, которое я упомянул выше, чтобы получить новые координаты:

    this->x = (int) ceil(this->x + (speedX * deltaT));
    this->y = (int) ceil(this->y - (speedY * deltaT));

Проблема начинается с первого шага: при определенных углах значение cos или sin очень близко к нулю. Итак, когда я умножаю его на скорость на получить, скажем, speedX, у меня все еще очень низкое число, а затем, когда я умножаю его на deltaT, оно все еще слишком низкое, и, наконец, при применении ceil это количество полностью теряется.

Например, при 94º, с deltaT = 1,5 и скоростью = 2, и если исходное значение X равно 400, мы имеем:

speedX = -0.1395...
this->x = 400 //it must be 399.86..., but stays in 400 due to the ceiling

Итак, в моей игре танк кажется повернутым, но движется прямо вперед. Кроме того, иногда он хорошо движется назад, а не вперед, и наоборот.

¿Как сделать, чтобы направление танка было более точным? Поднять скорость или значение deltaT нельзя, поскольку речь идет о баке, а не о формуле 1: P

14
задан mskfisher 9 May 2012 в 19:09
поделиться