Een beetje wiskunde

Status
Niet open voor verdere reacties.

wicherh

Gebruiker
Lid geworden
3 dec 2008
Berichten
188
Ik ben een spel aan het maken in XNA met tanks. En daarin kan je richten etc. met je muis.

Het is 2d en van bovenaf gezien.
En nu heb ik dus een tank die naar de muis moet gaan richten. Maar niet ineens maar langzaam moet gaan draaien naar de muis.

Hiervoor heb ik de muispositie, tankpositie, tankturretRotatie, en een constante tankturretrotatiesnelheid, en plaats van de plaats waarop je richt

Hiervoor heb ik dus een soort van manier bedacht:
1. Draai de turret eerst
2. Bereken de distance de muis naar de tank
3. Bereken de vector die uit de turret komt dus met cos/sin dat je een x,y vector hebt met lengte 1.
4. doe de distance keer de vector.
5. Dat is dan je nieuwe dotPositie.

Maar ik loop vast bij nummer 2, want dan moet hij links/rechtsom draaien en ik kan niet bedenken hoe ik dat zou moeten doen.
Iemand helpen?
Edit heb het gefixt:
Code:
       public void TurnToPoint(GameTime gameTime, Vector2 Point)
        {
            float angle = Angle(Point - Position);
            if (angle != TurretExactRotation)
            {
                float difference = MathHelper.WrapAngle(angle - TurretExactRotation);
                if (difference < 0)
                    RelativeTurretRotation = MathHelper.WrapAngle(RelativeTurretRotation - (TurnSpeedTurret * (float)gameTime.ElapsedGameTime.TotalSeconds));
                if (difference > 0)
                    RelativeTurretRotation = MathHelper.WrapAngle(RelativeTurretRotation + (TurnSpeedTurret * (float)gameTime.ElapsedGameTime.TotalSeconds));
            }
             
        }
 
Laatst bewerkt:
Je weet de tankpositie en de muispositie al. Je moet ze van elkaar aftrekken wil je de afstand krijgen. Echter ligt het eraan of de x en y coördinaten van de muis kleiner of groter zijn dan die van de tank. De variablelen MousePosition en TankPosition moet je even aanpassen aan de echte namen in je prog:

Code:
float CalcDistance()
{
    float XDistance, YDistance, TotalDistance;
    
    if(MousePosition.X > TankPosition.X) {
        XDistance = MousePosition.X - TankPosition.X;
    } else {
        XDistance = TankPosition.X - MousePosition.X;
    }
    
    if(MousePosition.Y > TankPosition.Y) {
        YDistance = MousePosition.Y - TankPosition.Y;
    } else {
        YDistance = TankPosition.Y - MousePosition.Y;
    }

    TotalDistance = Math.Sqrt((XDistance * XDistance) * (YDistance * YDistance));
    return (float)TotalDistance;
}

Ik heb het niet getest maar ik hoop dat het werkt :D
 
Laatst bewerkt:
dit wat jij zei wist ik al dat kan ook door:
Code:
 float Difference = Vector2.Distance(Tanks[0].Position, Mouseposition);

Maar ik loop vast bij stap 2, niet bij stap 1
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan