Hi guys,
I'm porting the first example to Corona. It doesn't have some methods which default Box2D library has.
Code:
function killOrthogonalVelocity(targetBody:b2Body){
var localPoint = new b2Vec2(0,0);
var velocity:b2Vec2 = targetBody.GetLinearVelocityFromLocalPoint(localPoint);
var sidewaysAxis = targetBody.GetXForm().R.col2.Copy();
sidewaysAxis.Multiply(b2Math.b2Dot(velocity,sidewaysAxis))
targetBody.SetLinearVelocity(sidewaysAxis);//targetBody.GetWorldPoint(localPoint));
}
My problem is at the killOrthogonalVelocity method. I ported it to this one:
Code:
local dot = function (x0,y0,x1,y1)
return (x0*x1 + y0*y1)
end
local killOrthogonalVelocity = function(body)
bodySpeedX,bodySpeedY = body:getLinearVelocity()
bodySideWayX = math.sin(body.rotation/180*math.pi)
bodySideWayY = -math.cos(body.rotation/180*math.pi)
bodySideWayX = bodySideWayX * dot(bodySideWayX,bodySideWayY,bodySpeedX,bodySpeedY)
bodySideWayY = bodySideWayY * dot(bodySideWayX,bodySideWayY,bodySpeedX,bodySpeedY)
body:setLinearVelocity(bodySideWayX,bodySideWayY)
end
I think It's pretty easy language. So you can understand what I did. Do you see where my mistake is? Instead of getting rotation vector like "targetBody.GetXForm().R.col2.Copy();" I used simple trigonometry for it. I assume it is correct but when I try to turn my car it starts to spin.
Thank you!