在方形精灵周围画一条像素线

时间:2014-10-04 10:06:15

标签: c# xna

我有一个15 x 15像素的盒子,我使用以下颜色以不同的颜色绘制几个:

spriteBatch.Draw(texture, position, colour);

我想要做的是在外面画一条像素线,用不同的颜色,这使它成为一个17 x 17的盒子,(例如),一个像素宽的蓝色轮廓和一个灰色中间。

我能想到的唯一方法是绘制两个盒子,一个是17x17的轮廓颜色,一个是15x15的盒子颜色,并将它们分层以给出轮廓的外观:

spriteBatch.Draw(texture17by17, position, outlineColour);
spriteBatch.Draw(texture15by15, position, boxColour);

显然,位置向量需要修改,但我认为这可以清晰地描述这个想法。

问题是:有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

考虑到XNA无法像 OpenGL立即模式那样绘制“线条”,用 spite 来绘制 spite 远远超过更高效 预先生成的纹理四边形(2个三角形),而不是使用动态纹理绘制其他几何图形,尤其是当单个“线”每个需要1个三角形时;尊敬地 2个三角形与4个。前者中的三角形和顶点也较少。

所以我不会尝试使用额外的几何图形来绘制“细线”,这些几何图形试图模仿另一个的外部线条,而是继续你正在做的事情 - 绘制2个不同的精灵(无论如何都是四边形)

  

以3D绘制的每个对象都是使用三角形绘制的。 - Would you like to know more?

答案 1 :(得分:0)

您可以使用DrawUserIndexedPrimitives绘制线条和三角形,有关详细信息,请参阅MSDN上的Drawing 3D Primitives using Lists or Strips。其他数字如矩形和圆形是由线条构成的,但您需要自己实现它们。

要在2D中渲染线条,只需使用从SpriteBatch镜像变换矩阵的正交投影。

你可以找到一个更完整的PrimitiveBatch类示例,该示例在XBox Live Indie Games的示例Primitives中封装了绘图的逻辑。