Ich möchte ein Objekt in den angegebenen Winkel verschieben, aber es bewegt sich nur nach oben und unten, nur Y-Achse.
Vector2 unitV = new Vector2((float)Math.Sin(player.angle), (float)Math.Cos(player.angle));
C# Vector2 So verschieben Sie ein Objekt in einen Winkel
unitV.Normalize();
player.model.Position += Vector2.Multiply(unitV,player.model.Speed) * (float)gameTime.ElapsedGameTime.TotalSeconds;
0
A
Antwort
1
Ich habe gerade dieses Problem beim Üben, aber hier ist die Lösung, die ich gefunden habe. Ich hoffe, das wird für dich funktionieren. Gebrauchte XNA 4 Cis.
Erklärung:
Texture2D sprite;
Vector2 spritePosition = Vector2.Zero;
Vector2 spriteOriginalPos;
float spriterotation = 0;
float anglecorrection = (Math.PI * 90/180.0);
float speed = 1;
Beachten Sie, dass die anglecorrection benötigt wird, um das Objekt in Richtung seiner „oben“ Winkel zu bewegen.
Last:
//Load basic texture to make it recognizable :)
sprite= Content.Load<Texture2D>("spritetexture");
//Default position in middle
spritePosition = new Vector2(
(graphics.GraphicsDevice.Viewport.Width/2) - (sprite.Width/2),
(graphics.GraphicsDevice.Viewport.Height/2) - (sprite.Height/2));
//Sprite centering
spriteOriginalPos.X = sprite.Width/2;
spriteOriginalPos.Y = sprite.Height/2;
Update:
if (Keyboard.GetState(PlayerIndex.One).IsKeyDown(Keys.Up))
{
spritePosition.X += speed * (float)Math.Cos(spriterotation - anglecorrection);
spritePosition.Y += speed * (float)Math.Sin(spriterotation - anglecorrection);
}
Draw:
spriteBatch.Draw(sprite, spritePosition, null, Color.Black, spriterotation, spriteOriginalPos, 1.0f, SpriteEffects.None, 0f);
Ihr Code sieht gut zu mir (aber ich bin sehr müde!). Bevor Sie 'player.model.Position' einstellen, was ist der tatsächliche Wert von' Vector2.Multiply (unitV, player.model.Speed) * (float) gameTime.ElapedGameTime.TotalSeconds'? – spender
http://www.riemers.net/eng/Tutorials/XNA/CSharp/series2d.php – phadaphunk
danke, ich tat es auf andere Weise –