我有一个15 x 15像素的盒子,我使用以下颜色以不同的颜色绘制几个:
spriteBatch.Draw(texture, position, colour);
我想要做的是在外面画一条像素线,用不同的颜色,这使它成为一个17 x 17的盒子,(例如),一个像素宽的蓝色轮廓和一个灰色中间。
我能想到的唯一方法是绘制两个盒子,一个是17x17的轮廓颜色,一个是15x15的盒子颜色,并将它们分层以给出轮廓的外观:
spriteBatch.Draw(texture17by17, position, outlineColour);
spriteBatch.Draw(texture15by15, position, boxColour);
显然,位置向量需要修改,但我认为这可以清晰地描述这个想法。
问题是:有更好的方法吗?
答案 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中封装了绘图的逻辑。