2012-09-08 164 views
0
 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本质是0..1,并与显示宽度和高度相乘。屏幕位置是通过拖动屏幕获得的。对于其他元素,基元,位置是正确的,并且与输入一起正在被拖动。然而,当绘制一个精灵时,精灵正在快速移动,比输入快,给出了一种视差效果,而不是我想要的。精灵的位置

不知何故,我得到我使用的参数错误的感觉,spriteBatch.Draw(..)不需要pixelcoordinates ..

宽度和高度由质地装载机获得。

public Vector2 getOrigin() 
    { 
     return new Vector2(width/2, height/2); 
    } 

    public Rectangle getRectangle() 
    { 
     return new Rectangle(
      0, 
      0, 
      width, 
      height); 
    } 

此外,我正在开发Windows Phone。

+0

需要一些更多的信息,你的意思是被拖动的游戏窗口? screenPosition如何定义?使用视口属性的高度/宽度:graphicsDevice.Viewport.Width/Height。 –

回答

1

getRectangle()方法基本上没用,你要指定一个与纹理大小相同的源矩形 - 使用null代替(除非你刚才简化了我们的代码)。

screenPosition是如何定义的?我不明白你为什么会用-1来计算它。您还正在使用窗口所在的屏幕来获得宽度/高度,这是您应该避免的,因为只有当窗口与屏幕大小相同时,才会使用此窗口的宽度/高度。

尝试绘制精灵到Vector2.Zero没有来源,并与sourceRectangle设置为null。慢慢地加回你的其他参数,并查看错误发生的位置。如果没有更多信息,我们无法真正说出其他的话

spriteBatch.Draw(
    texture, 
    Vector2.Zero, 
    null, 
    Color.White, 
    0, 
    Vector2.Zero, 
    1, 
    SpriteEffects.None, 
    1); 

这是我用来确保精灵实际正常显示。

+0

感谢您的信息,很有帮助,但我已经通过切换宽度和高度来解决它。可能需要,因为我正在使用横​​向模式。 – RobotRock

+0

你的意思是?如果交换高度和宽度修正,那么它听起来像你的实际计算是错误的方式! –