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 并将其与显示宽度和高度相乘。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 开发。

4

1 回答 1

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);

这是我用来确保精灵实际正确显示的方法。

于 2012-09-08T22:34:18.417 回答