C# · 12月 30, 2021

c# – 如何绘制正方形边框?

我使用单声道(使用XNA API接口)写我的游戏.到目前为止,它是伟大的,但我已经打破了一些应该是简单的东西.

我需要画一个2d平方.但我只想要边框(不填).

我看到很多例子,显示如何做一个填补的.但是没有一个只会显示一个边界.

我想我可以做一个图像并使用它.但我怀疑它会调整好.

解决方法 我刚刚以这种方式创建了一个Texture2D的扩展方法: static class Utilities { public static void CreateBorder( this Texture2D texture,int borderWidth,Color borderColor ) { Color[] colors = new Color[ texture.Width * texture.Height ]; for ( int x = 0; x < texture.Width; x++ ) { for ( int y = 0; y < texture.Height; y++ ) { bool colored = false; for ( int i = 0; i <= borderWidth; i++ ) { if ( x == i || y == i || x == texture.Width – 1 – i || y == texture.Height – 1 – i ) { colors[x + y * texture.Width] = borderColor; colored = true; break; } } if(colored == false) colors[ x + y * texture.Width ] = Color.Transparent; } } texture.SetData( colors ); }}

然后我测试了:

//…protected override void Initialize( ) { // TODO: Add your initialization logic here square = new Texture2D( GraphicsDevice,100,100 ); square.CreateBorder( 5,Color.Red ); base.Initialize( );}//…protected override void Draw( GameTime gameTime ) { GraphicsDevice.Clear( Color.CornflowerBlue ); // TODO: Add your drawing code here spriteBatch.Begin( ); spriteBatch.Draw( square,new Vector2( 0.0f,0.0f ),Color.White ); spriteBatch.End( ); base.Draw( gameTime );}

结果如下: