Vector2 drawPos = (-screenPosition);
drawPos.X *= (float)device.DisplayMode.Width;
drawPos.Y *= (float)device.DisplayMode.Height;
spriteBatch.Draw(
texture,
drawPos,
getRectangle(),
Color.White,
rotation,
getOrigin(),
1.0f / zoom,
SpriteEffects.None,
0);
我有一个drawPos essentialy为0..1并将其与显示宽度和高度相乘。通过拖动屏幕获得screenposition。使用其他元素,基元,位置是正确的,并且与输入一起被完全拖动。然而,当绘制精灵时,精灵正在快速移动,比输入更快,产生一种视差效果,而不是我想要的。
我不知何故感觉我使用了错误的参数,并且spriteBatch.Draw(..)不需要像素坐标..
宽度和高度由纹理加载器获得。
public Vector2 getOrigin()
{
return new Vector2(width / 2, height / 2);
}
public Rectangle getRectangle()
{
return new Rectangle(
0,
0,
width,
height);
}
另外,我正在为Windows Phone开发。
答案 0 :(得分:1)
getRectangle()
方法基本没用,你指定一个与纹理大小相同的源矩形 - 改为使用null
(除非你刚刚为我们简化了你的代码)。
screenPosition是如何定义的?我不明白为什么你的时间是-1。您还使用窗口所在的屏幕来获取device.DisplayMode
的宽度/高度,这是您应该避免的,因为只有当您的窗口与屏幕大小相同时才会有效。
尝试将精灵绘制到没有原点的Vector2.Zero
,并将sourceRectangle
设置为null
。慢慢添加回其他参数并查看错误发生的位置。没有更多信息,真的不能说太多其他内容!
spriteBatch.Draw(
texture,
Vector2.Zero,
null,
Color.White,
0,
Vector2.Zero,
1,
SpriteEffects.None,
1);
这是我用来确保精灵实际正确显示的方法。