Hier ist mein Problem, ich möchte in der Lage sein, mein Sprite zu skalieren und sie an der gleichen Stelle zu halten, wie sie vor der Skala waren. Ich benutze die Mitte des Sprites für den Ursprungsparameter, weil ich auch mein Sprite drehen möchte.MonoGame/XNA Skalierung und Ursprung
Ich bin sicher, dass die Lösung trivial sein wird, aber ich kann keine richtige/allgemeine Lösung finden, um dieses Problem zu lösen.
Wenn es nicht wirklich klar ist, habe ich ein paar Bilder gemacht, um meinen Code, das Ergebnis dieses Codes und was ich erreichen möchte, zu zeigen.
1 - Das ist mein Code und das Ergebnis ist das, was ich, wenn ich das Sprite skaliert, wie Sie das Sprite skaliert wird sehen können, aber es „bewegt“: http://pasteboard.co/uOogJeL.png
Wie hier im Kommentar vorgeschlagen ist Code:
Vector2 scale = Vector2.One;
float rotation = 0;
public void Update(GameTime gameTime)
{
if (Input.IsKeyPressed(Keys.P))
scale += new Vector2(0.05f, 0.0f);
if (Input.IsKeyPressed(Keys.M))
scale -= new Vector2(0.05f, 0.0f);
if (Input.IsKeyPressed(Keys.O))
scale += new Vector2(0.0f, 0.05f);
if (Input.IsKeyPressed(Keys.L))
scale -= new Vector2(0.0f, 0.05f);
if (Input.IsKeyPressed(Keys.D))
rotation += MathHelper.ToRadians(5);
if (Input.IsKeyPressed(Keys.Q))
rotation -= MathHelper.ToRadians(5);
Input.Update(gameTime);
}
public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp, null, null, null, Matrix.CreateScale(4));
spriteBatch.Draw(Sprites.BACKGROUND, Vector2.Zero, new Rectangle(0, 0, 128, 128), Color.White);
Vector2 marioPosition = new Vector2(64, 112 - 32);
Rectangle source = new Rectangle(0,0,16,32);
Vector2 origin = source.Size.ToVector2()/2;
spriteBatch.Draw(Sprites.MARIO, marioPosition + origin, source, Color.White, rotation, origin, scale, SpriteEffects.None, 0f);
spriteBatch.End();
}
2 - um diesen Punkt Dies ist, was ich zu erreichen, mag ich weiß, dass ich diese meinen Ursprungspunkt tun kann, indem ich will es in der Mitte des Sprites halten, so kann ich Drehung anwenden : http://pasteboard.co/rzMfc0p.png
Danke.
Willkommen bei Stackoverflow. Könnten Sie Ihren Code in den Hauptteil der Frage einfügen, so wird es einfacher, Ihre Frage zu lesen, ohne zwischen den Seiten zu wechseln, und für den Fall, dass die Seite, die Sie verlinkt haben, jemals entfernt wird, haben wir den Code für zukünftige Leser . –