【问题标题】:Position of sprite精灵的位置
【发布时间】:2013-01-21 22:33:46
【问题描述】:
        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 开发。

【问题讨论】:

  • 需要更多信息,您是指正在拖动的游戏窗口吗? screenPosition 是如何定义的?使用高度/宽度的视口属性:graphicsDevice.Viewport.Width/Height。

标签: c# xna


【解决方案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);

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

【讨论】:

  • 感谢您的信息,非常有帮助,但我已经通过切换宽度和高度解决了它。可能需要它,因为我使用的是横向模式。
  • 你是什么意思?如果交换高度和宽度修复,那么听起来您的实际计算方式是错误的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多