Hi,
1) You can create the body as a kinematic body (as opposed to a static or dynamic body). You can then directly position and rotate the body how you want, without the simulation becoming unstable. It will not be affected by other bodies colliding with it.
To acheive what you want, a small bit of trig is necessary. If you need any help with that just ask.
2) The first body in a mouse joint has no real purpose. The underlying Box2D API requires you to specify a body, so I had a choice: either automatically create a static body in every new world, and use that as the first body when creating mouse joints, or make the user specify one.
The problem with the first option is that it affects other commands. The total number of bodies will be one more than the user expects. When looping through bodies in a world, this special body would have to be skipped, etc. Overall, I decided it would be better to keep to the original API.
As for your problems with mouse joints: make sure you haven't set the optional "collide connected" flag to zero when you create the mouse joint.
If that's not the problem, try reducing the force applied by the mouse joint (b2SetMouseJointMaxForce).
3/4) Change your loop to resemble the following:
b2FindBodyContacts boxBody
while b2GetContact()
numContactPoints = b2GetContactManifoldPointCount()
for i = 0 to numContactPoints-1
print b2GetContactManifoldWorldPointX(i)
print b2GetContactManifoldWorldPointY(i)
next i
endwhile
For simplicity and performance, contacts work using a "current contact" instead of an ID. The b2FindXXXContacts commands generate an internal list of contacts. b2GetContact() removes the first element from this list, and makes it the current contact. If the list was empty it returns zero, otherwise it returns one.
The lifetime of contacts is so short and unpredictable that it would waste time generating IDs for all of them.
[b]
