0

我一直在尝试解决这个问题,但我不知道。我在询问起源之前就知道了,但我真的不知道如何解决这个问题。

在此处输入图像描述

红点 = 坐标 xy

黄点 = spritebatch.draw 中使用的原点

原点=新向量(img.width/2,img.height/2);

位置 = 新矩形(400、200、img.width、img.height);

center_x = position.center.x center_Y= position.center.y

我注意到,即使我在使用 spritebatch.draw 时放置了原点,定位仍然是从 0,0 原点而不是黄点完成的。我怎样才能改变这个?当我在位置矩形上检查 Y 和 X 的中心并将其与实际坐标进行比较时,我注意到了这一点。中心高于其自身的坐标。我希望它使中心坐标与位置的 X 和 Y 相同。例如,我在位置矩形中为 X 分配 200,为 Y 分配 200。当我去检查那个矩形的中心时,我希望它在 X 和 Y 上都是 200。另外,我使用矩形进行定位,因为我也在测试碰撞的东西。

一个例子会很好,在此先感谢

4

3 回答 3

1

您正在传递定位一个矩形,而是使用 Vector2 来定位:

  Vector2 origin = new Vector2(img.Width, img.Height) * 0.5f;
  Vector2 pos = new Vector2(400,200) + origin;
  spriteBatch.Draw(img, pos, null, Color.White, 0, origin, SpriteEffects.None, 0)

这肯定有效。

编辑:如果您想使用矩形,请确保原点与纹理大小有关。

  Rectangle bounds = new (400,200, img.Width, img.Height);
  Vector2 origin = new Vector2(img.Width, img.Height) * 0.5f;
  spriteBatch.Draw(img, bounds, null, Color.White, 0, origin, SpriteEffects.None, 0)

  This works too. 

  The position of the yellow dot will be (400,200)
  if you don't use origin, the red dot position will be (400,200)
于 2013-08-28T11:22:20.253 回答
1

如果您尝试绘制一个将其设置Origin在其中心的精灵,那么您做对了。考虑到屏幕尺寸为 800x480,您的黄点位于 (400, 200) 位置,并且屏幕截图中的点合理地位于该位置。但是如果你想让你的精灵的左上角有那个位置,你需要改变你的Draw调用。

指定 时Origin,请尝试使用Vector2position 而不是Rectangle第二个参数 ofDraw来设置精灵的位置。

指定Vector2位置和原点:

origin = newVector2(img.Width, img.Heigth) / 2;
pos = new Vector2(400, 200) + origin;
spriteBatch.Draw(img, pos, null, Color.White, 0, origin, SpriteEffects.None, 0);

或仅使用位置Rectangle

posRect = new Rectangle(400, 200, img.Width, img.Heigth);
spriteBatch.Draw(img, posRect, Color.White);
于 2013-08-28T10:16:10.247 回答
1

我在我们的 spriteBatch 示例中看不到位置。尝试将它与所有属性一起使用。

SpriteBatch.Draw (Texture2D, ImgPosition, ImgRect, ImgColor, ImgRotate, ImgOrigin, Scale, SpriteEffects, Layer)

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritebatch.draw.aspx

于 2013-08-28T06:15:17.353 回答