Dobrý den, pracuji na jedné hře v XNA. Jedná se o vesmírnou loď která létá po vesmíru. Normálně se loď pohybuje v pořádku jak bych si představoval, ale když vložím do hry omezovač rychlosti, který má omezit maximální rychlost pod daným úhlem (jinak by mi loď šikmo mohla letět dvojnásobnou rychlostí). Loď tehdy při zatáčení okamžitě zpomaluje, což je zde nechtěné.
Zde je problematický kus kódu:
//speed = 1.0f
//angle = aktualni sklon lodi vuci ose v radianech
//acceleration = 0.001f
Vector2 move = MoveUnderAngle(angle, speed);
Vector2 maxMove = new Vector2(Math.Abs(move.X), Math.Abs(move.Y));
velocity += move * acceleration;
if (Math.Abs(velocity.X + move.X*acceleration) > maxMove.X) {
velocity.X = (velocity.X > 0 ? maxMove.X : maxMove.X * -1);
}
if (Math.Abs(velocity.Y + move.Y * acceleration) > maxMove.Y)
{
velocity.Y = (velocity.Y > 0 ? maxMove.Y : maxMove.Y * -1);
}
//.....
sprite.Position += velocity;
Chtěl bych, aby loď zpomalovala plynule když změní směr aby se daným směrem nepřestala při otočení ihned pohybovat. Zde přikládám ještě 2 videa s ukázkou jak se loď pohybuje s omezovačem a jak bez něj.