【问题标题】:XNA stretching spriteXNA 拉伸精灵
【发布时间】:2011-11-13 07:32:48
【问题描述】:

我想根据移动/速度方向拉伸一个精灵。为简单起见,精灵是白色的 5x5 像素。包括一个黑色的 1x1 边框

因此,例如,如果精灵从当前位置向“3 点钟”移动,它会像细线一样对角拉伸/缩放,类似于基于随机移动的任何其他角度/弧度。

我尝试采用:vector2 位置 - 原始位置,然后将其与:length() 一起用于 x 和 y 比例值,但这会产生大比例块而不是一条线?

有什么想法吗?关于缩放和计算方向角

保罗。

【问题讨论】:

  • 在要缩放的图像中包含边框是个坏主意,因为边框会变形并且看起来很奇怪。如果对象在几何上是规则的,首先绘制缩放的对象,然后用相应的比例绘制它周围的边框。

标签: graphics xna 2d scale


【解决方案1】:

这是很久以前的事了,所以可能对最初提出请求的人没有多大用处。但是你有三个选择。一种是使用 Draw(Texture2D, Rectangle, ...) 而不是 Draw(Texture2D, Vector2 ...)。 Vector2 只设置 x 和 y 坐标,因此如果您使用该方法调整大小,您将调整整个精灵的大小。矩形包含 X、Y 和单独的高度和宽度值,因此使用矩形可以沿一个轴调整大小。您仍然会遇到末端问题,但这可以通过将末端视为单独的精灵来解决。我将此方法用于可变大小的边框。

第二个,在你描述的简单精灵的情况下工作,是在运行时创建纹理。创建一个所需大小的新 Texture2D,然后创建一个足够大以覆盖每个像素的颜色数组,并使用 .SetData(Color[]) 分配该数组。这有相当多的计算开销,但我用它在运行时突出显示可变大小的边界框,所以它工作正常。

当然,primitives 选项看起来也不错。 :)

【讨论】:

    【解决方案2】:

    我认为你必须创建多个精灵来显示线条。您需要线条内部部分的过渡精灵和端点的精灵。

    【讨论】:

    • 是的,我可以看到一组原语创建了您想要的效果。
    【解决方案3】:

    请清楚地说明您的问题。你能上传任何截图吗?不过,据我了解,您应该使用距离公式在 X 方向缩放精灵,然后使用 tan 反函数旋转它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      相关资源
      最近更新 更多