精灵的位置

时间:2012-09-08 19:26:35

标签: c# xna

        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开发。

1 个答案:

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

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