I'm trying to build a simple side scroller with an airplane being the player. As such, I want to build simple flight controls with simple but realistic-feeling physics. I'm making use of cocos2D and Box2D. I have a basic system working, but just can't get the physics feeling correct.
I am applying force to the plane (which is a b2CircleShape
) based on the user's input. So, basically, if the user pushes up, body_->ApplyForce(b2Vec2(10,30), body_->GetPosition())
is called. Similarly, for down -30 is used.
This works and the plane flies along with up/down causing it to dive or climb. But it just doesn't feel right. There is no slowdown on climbs, nor speed up during dives. My simple solution is far to simple.
How can I get a better feel for a plane climbing/diving?
I ended up simplifying the basic forces that apply in flight: Namely thrust, drag, lift and gravity.
I did the following simplifications:
Now, the user only controls the angle of the plane, then the thrust and lift forces are adjusted and the world simulation is updated.
This gave a good feeling simulation but greatly simplified.