【问题标题】:How to crop blank rows in the middle of an image in XNA?如何在 XNA 中裁剪图像中间的空白行?
【发布时间】:2013-12-16 19:53:51
【问题描述】:

假设我有一个Texture2D,其中包含一个角色的动画片段。该条带的底线 个特定颜色的点,这种颜色在条带的其他任何地方都没有使用,在每个精灵的开始和结束处(意思是,在底部有一个点)每个精灵前后的空白行)。

我想裁剪每个精灵之间的所有空白行,从而使一个精灵的结尾重叠成为另一个精灵的开始(意思是,让一个精灵的结束点成为下一个的起始点)。 有什么方法可以自动用 XNA 做到这一点?

基本上,从这个开始:http://i41.tinypic.com/2wdx53l.jpg(每个精灵之间都有一个空格。)

对此:http://i40.tinypic.com/10ydjde.jpg(每个精灵的开头与前一个精灵的结尾重叠。)

(红点应该在每对蓝点之间的中间,但你明白了。)

附加信息:

A.有一个 int[] 包含每个 strip(行)的开始和结束的 X 值,还有一个 List<int>[] 包含每个 sprite 的开始和结束的 X 值em> 对于每个 strip(行,每个条带单独)。

B.在每个精灵的开始和结束之间的中间还有一个点,它不会出现在空白行中。

C.每个条带都需要导出为 .png 文件(使用包含每个条带的 Texture2D 数组)。到目前为止,我可以很好地导出(裁剪)帧,但是如果有任何方法可以将它们重新装订成条带,那就太好了。

提前致谢,请原谅复杂的措辞...

【问题讨论】:

  • 如果您可以发布您的 spritesheet,它会更容易理解。
  • 已添加 - 抱歉图片尺寸过小。

标签: c# xna sprite crop texture2d


【解决方案1】:

我不知道为什么你的精灵之间需要这些点,但如果你知道每个精灵的宽度,那么你只需要在你的精灵表上按顺序移动一个Rectangle(我想你已经有),然后添加精灵宽度减去该点的宽度。
通过这种方式,您应该按照您的要求将一个精灵的结束点作为下一个精灵的开始点。

【讨论】:

  • 这就是想法,但我该如何处理Texture2D?此外,这些点有助于动画更平滑地变化,而不是查找每个精灵的开始和结束位置。
  • 我不认为您可以物理地裁剪纹理中的空白行,但您应该管理绘图以执行我在上面写的内容以获得您的意思。我没有看到任何其他方式。您的目标是绘制该 spritesheet,不是吗?
猜你喜欢
  • 2018-05-15
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
相关资源
最近更新 更多