我刚刚以这种方式创建了一个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 );
}
结果如下: