Из документов для Sprite :
поворот (градусы плавания)
Устанавливает вращение спрайта в градусах относительно текущего вращения.
и из документов для b2Body :
void b2Body :: SetAngularVelocity (float32 omega)
Установите угловую скорость.
Параметры
Омега новая угловая скорость в радианах / секунду.
Таким образом, один метод ожидает радианы, а другой - градусы. Вы должны конвертировать свою ценность.
Либо радианы в градусах: b2body.setAngularVelocity(-1 * 180.f / PI);
Или градусы в радианах: rotate(-1 * PI / 180.f);
, где PI
- окончательное статическое значение, содержащее значение π.
Кроме того, эти методы также делают разные вещи: один устанавливает скорость, другой устанавливает относительный угол поворота. Даже после исправления параметров, будет только удача, если вы получите тот же результат, который может произойти, только если вы называете их каждый кадр, а длительность кадра точно соответствует угловой скорости box2d (это означает, что он вращается точно на омега каждый кадр).
Я бы рекомендовал скопировать фактический угол вашего объекта b2Body в спрайт, вместо того, чтобы физический движок и движок рендеринга вычисляли вращения. Физический движок должен иметь власть над положением и вращением объекта, в то время как средство визуализации должно просто визуализировать. Вот так:
setRotation(b2body.getAngle() * 180.f / PI);