2012-09-08 216 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

你的意思是?如果交換高度和寬度修正,那麼它聽起來像你的實際計算是錯誤的方式! –