vanderlin / ofxBox2d

Openframework wrapper for box2d

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

body rotation reset when changing position

turowskipaul opened this issue · comments

I don't understand why setPosition resets a body's rotation. (In ofxBox2dBaseShape, setPosition calls setTransform with an angle of 0.) Is there a reason for this?

For example, in the following code:

ofLogNotice() << "freezer->getRotation(): " << freezer->getRotation();
float tempPosX = (float)freezer->getPosition().x + (posXDiff * freezerPosLerp);
float tempPosY = (float)freezer->getPosition().y + (posYDiff * freezerPosLerp);
freezer->setPosition(tempPosX, tempPosY);
ofLogNotice() << "freezer->getRotation(): " << freezer->getRotation();

I get the following output in the console:

[notice ] freezer->getRotation(): 118.134
[notice ] freezer->getRotation(): 0

To preserve rotation, I have to do this instead:

ofLogNotice() << "freezer->getRotation(): " << freezer->getRotation();
float tempRot = freezer->getRotation();
float tempPosX = (float)freezer->getPosition().x + (posXDiff * freezerPosLerp);
float tempPosY = (float)freezer->getPosition().y + (posYDiff * freezerPosLerp);
freezer->setPosition(tempPosX, tempPosY);
freezer->setRotation(tempRot);
ofLogNotice() << "freezer->getRotation(): " << freezer->getRotation();

this has been fixed with the latest update.