私の問題は、私がスプライトをスケールし、それらがスケールの前と同じ場所に保持できるようにしたいということです。私は私のスプライトも回転できるようにしたいので、私は原点のパラメータにスプライトの中心を使用します。MonoGame/XNA Scaling and Origin
私は解決策は簡単だろうと確信していますが、私はこの問題を解決するための適切な/一般的な解決策を見つけることができません。
実際にはっきりしない場合は、私のコード、このコードの結果、および達成したいことを示すために写真をいくつか作成しました。ここのコメントで示唆したようhttp://pasteboard.co/uOogJeL.png
がある: -
1は、この私のコードと、この結果は私がスプライトをスケーリングするときに、スプライトが拡大縮小されますが、それは「移動」を参照してくださいすることができますよう私は、得るものですコード:
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 - これは、私が達成したいものです、私は私の原点を移動することでこれを行うことができます知っているが、私はこの点を中心に回転を適用することができるようにスプライトの中心でそれを維持したいです:http://pasteboard.co/rzMfc0p.png
ありがとうございました。
ようこそ。あなたは質問の本文にコードを貼り付けることができます。これにより、ページ間を移動することなく質問を読むことが容易になります。リンクしたページが削除された場合でも、将来の読者のために質問にコードが残っています。 –