diff --git a/cocos/physics/CCPhysicsBody.cpp b/cocos/physics/CCPhysicsBody.cpp index 240f9833ba..dc959f0600 100644 --- a/cocos/physics/CCPhysicsBody.cpp +++ b/cocos/physics/CCPhysicsBody.cpp @@ -345,7 +345,7 @@ void PhysicsBody::setPosition(Point position) void PhysicsBody::setRotation(float rotation) { - cpBodySetAngle(_info->getBody(), PhysicsHelper::float2cpfloat(rotation * M_PI / 180.0f)); + cpBodySetAngle(_info->getBody(), -PhysicsHelper::float2cpfloat(rotation * M_PI / 180.0f)); } Point PhysicsBody::getPosition() const diff --git a/tests/test-cpp/Classes/PhysicsTest/PhysicsTest.cpp b/tests/test-cpp/Classes/PhysicsTest/PhysicsTest.cpp index 3fc4732efc..45392a3ce9 100644 --- a/tests/test-cpp/Classes/PhysicsTest/PhysicsTest.cpp +++ b/tests/test-cpp/Classes/PhysicsTest/PhysicsTest.cpp @@ -16,6 +16,7 @@ namespace CL(PhysicsDemoPump), CL(PhysicsDemoOneWayPlatform), CL(PhysicsDemoSlice), + CL(PhysicsDemoBug3988), #else CL(PhysicsDemoDisabled), #endif @@ -1219,4 +1220,31 @@ std::string PhysicsDemoSlice::subtitle() const return "click and drag to slice up the block"; } + +void PhysicsDemoBug3988::onEnter() +{ + PhysicsDemo::onEnter(); + _scene->toggleDebug(); + _scene->getPhysicsWorld()->setGravity(Vect::ZERO); + + auto ball = Sprite::create("Images/YellowSquare.png"); + ball->setPosition(VisibleRect::center() - Point(100, 0)); + ball->setRotation(30.0f); + this->addChild(ball); + + auto physicsBall = makeBox(VisibleRect::center() + Point(100, 0), Size(100, 100)); + physicsBall->setRotation(30.0f); + this->addChild(physicsBall); +} + +std::string PhysicsDemoBug3988::title() const +{ + return "Bug3988"; +} + +std::string PhysicsDemoBug3988::subtitle() const +{ + return "All the Rectangles should have same rotation angle"; +} + #endif // ifndef CC_USE_PHYSICS diff --git a/tests/test-cpp/Classes/PhysicsTest/PhysicsTest.h b/tests/test-cpp/Classes/PhysicsTest/PhysicsTest.h index 9e9e69f96e..31f3e6fbdb 100644 --- a/tests/test-cpp/Classes/PhysicsTest/PhysicsTest.h +++ b/tests/test-cpp/Classes/PhysicsTest/PhysicsTest.h @@ -184,5 +184,16 @@ private: int _sliceTag; }; +class PhysicsDemoBug3988 : public PhysicsDemo +{ +public: + CREATE_FUNC(PhysicsDemoBug3988); + + void onEnter() override; + virtual std::string title() const override; + virtual std::string subtitle() const override; +}; + + #endif #endif