Question

I am creating a game which uses accelerometer to move ball (football model game).

function acc(e)
   physics.setGravity(e.xInstant*(screenW/4), -1*e.yInstant*(screenH/4))
end

But this code not giving a smooth flow of game. Can u guys help me for right option

Était-ce utile?

La solution

You either need to "calibrate" or to change the algorithm. I would try calibrate first: replace your acc() with

function acc(e)
   local calibX = 1
   local calibY = 1
   -- physics.setGravity(calibX * e.xInstant*(screenW/4), -calibY * e.yInstant*(screenH/4))
   print(e.xInstant, e.yInstant, e.zInstant)
end

and do the tilting that you feel is "not smooth", looking at the values printed when you do that. This will tell you what calibX and Y should be, set them then uncomment the physics line, comment out the print line, try again, until you get it right. For example, if the x and y instant are around 10, you could try calibX = 0.1 or less.

If you can't find values for calibration coefficients that give you desired motion, you need to change your algorithm. For example, if you are trying to simulate the tilt of your device as though it was a table on which a marble rolls, and tilting the table should make marble move, then changing gravity is not the way to do it. You want to apply a horizontal force which is equal to g*sin(theta) where g is gravity and theta is the tilt angle of the device side-to-side. The formula is slightly more complex if you allow tilt along the other direction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top