我使用单声道(使用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 );
- }
结果如下: